我有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
我怎样才能做到这一点?
任何形式的帮助表示赞赏,在此先感谢:)!
答案 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