我找到了很多关于校对和重音不敏感搜索的答案,阅读了1000篇关于这个问题的帖子和文章,但没有找到答案。
有没有人知道如何强制mysql使用所有波兰字符搜索重音不敏感?也许有人得到了一个编译的整理文件(Debian)?
请注意:
utf8_general_ci
无济于事。它不能正确支持Ł
。但它确实破坏了搜索顺序。utf8_unicode_ci
无济于事。与上述相同。我真的不明白为什么MySQL工作人员不会将此作为一个bug来威胁。显而易见的是,它已经存在了很长时间。自4.xx以来,他们确实纠正了Ś
封信...所以为什么不Ł
?!
我找到了This MySQL functionality的一些引用,但没有关于如何使用它的信息。我真的不明白那里写的是什么,是否可以帮助我。
试验:
mysql> show full columns from test;
+-------+--------------+----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+-------+--------------+----------------+------+-----+---------+-------+---------------------------------+---------+
| str | varchar(255) | utf8_polish_ci | YES | | NULL | | select,insert,update,references | |
+-------+--------------+----------------+------+-----+---------+-------+---------------------------------+---------+
mysql> insert into test values('Łomża');
...
mysql> select str from test where str like '%Łomża%'\G
*************************** 1. row ***************************
str: Łomża
mysql> select str from test where str like '%Łomza%'\G
Empty set (0.00 sec)
--
mysql> select str from test where str like '%Łomza%' collate utf8_general_ci\G
*************************** 1. row ***************************
str: Łomża
mysql> select str from test where str like '%Lomza%' collate utf8_general_ci\G
Empty set (0.00 sec)
--
mysql> select str from test where str like '%Łomza%' collate utf8_unicode_ci\G
*************************** 1. row ***************************
str: Łomża
mysql> select str from test where str like '%Lomza%' collate utf8_unicode_ci\G
Empty set (0.00 sec)
答案 0 :(得分:1)
我刚刚开始使用MySql,“波兰语”问题的答案是整理utf8_unicode_520_ci,其中l =ł= L =Ł-其他都一样 波兰语,带有重音符号。没有字符转换,没有ascii列,没有任何东西……经过多年在Sqlite中搜索ł/Ł解决方案。
答案 1 :(得分:0)
我建议在数据库中再搜索一列,例如'str_search'。在数据库中将字符串插入'str_search'时,请在PHP中创建并使用函数,如下所示:
function convertPolishChars($phrase)
{
$phrase = str_replace("ą", "a", $phrase);
$phrase = str_replace("Ą", "A", $phrase);
$phrase = str_replace("ć", "c", $phrase);
$phrase = str_replace("Ć", "C", $phrase);
$phrase = str_replace("ę", "e", $phrase);
$phrase = str_replace("Ę", "E", $phrase);
$phrase = str_replace("ł", "l", $phrase);
$phrase = str_replace("Ł", "L", $phrase);
$phrase = str_replace("ń", "n", $phrase);
$phrase = str_replace("Ń", "N", $phrase);
$phrase = str_replace("ó", "o", $phrase);
$phrase = str_replace("Ó", "O", $phrase);
$phrase = str_replace("ś", "s", $phrase);
$phrase = str_replace("Ś", "S", $phrase);
$phrase = str_replace("ź", "z", $phrase);
$phrase = str_replace("Ź", "Z", $phrase);
$phrase = str_replace("ż", "z", $phrase);
$phrase = str_replace("Ż", "Z", $phrase);
return $phrase;
}
"INSERT INTO test (str, str_search) VALUES ('Łomża', '" . convertPolishChars('Łomża') . "')"
在编写SQL查询时,请编写如下内容:
"SELECT str FROM test WHERE str_search like '%" . convertPolishChars('Łomża') . "%'"
此方法将更快地执行查询字符串,而不是在SQL语句中执行任何转换。
确保索引“str_search”列。
对于较大的数据库,我建议使用 MATCH AGAINST 进行 FULLTEXT 搜索。 http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html