克罗地亚语变音符号MySQL DB - like子句

时间:2011-03-01 19:55:06

标签: mysql

我有MySQL db,db engine InnoDB,整理设置为utf8-utf8_general_ci(也尝试过utf8_unicode_ci)。我想数据库来处理equalyč和c,ž和z,ć和c,š和s,đ和d。 E.g,

table1

-------------
id  | name
-------------
1   | mačka
2   | đemper
-------------

如果我运行查询:
SELECT * FROM table1 WHERE name LIKE '%mac%'

SELECT * FROM table1 WHERE name LIKE '%mač%' 我会得到结果:

-------------
id  | name
-------------
1   | mačka

哪个好,这正是我想要的。
但是如果运行查询:

SELECT * FROM table1 WHERE name LIKE '%de%'

我得到零结果。

如果我运行查询:

SELECT * FROM table1 WHERE name LIKE '%đe%'

我会得到:

-------------
id  | name
-------------
2   | đemper

这不是我想要的行为。我希望两个(最后两个查询)都返回:

-------------
id  | name
-------------
2   | đemper

我怎样才能做到这一点?
任何形式的帮助表示赞赏,在此先感谢:)!

2 个答案:

答案 0 :(得分:2)

如果不使用正则表达式,则无法完成此操作,因为MySQL中没有将đ视为等同于d的排序规则。

答案 1 :(得分:0)

您正在使用的排序规则确定了这样的内容 - 哪些字符被视为“相等”,以及它们应该排序的顺序。但首先,您需要知道您的表格使用的是什么编码。

命令SHOW TABLE STATUS LIKE 'table1'\G应该告诉你。这将有助于您确定需要使用的排序规则。

如果是Unicode(例如UTF8),则需要设置Unicode排序规则。对于克罗地亚语,似乎没有一个内置的MySQL。您可以查看MySQL Character Set manual page以查看是否有足够“足够接近”的内容。

如果是iso-latin-2(iso-8859-2),那么你可以使用'latin2_croatian_ci'整理。

如果它是CP-1250,那么还有一个'cp1250_croatian_ci'整理。

非unicode排序规则位于手册here

修改 正如Ignacio Vazquez-Abrams正确指出的那样,没有任何MySQL整理将'đ'视为等同于'd'。 (Reference for MySQL collations

如果您真的非常渴望花费大量时间,还可以阅读how to install your own custom collation