如何使MySQL知道LIKE和REGEXP中的多字节字符?

我有一个包含两列的MySQL表,均已utf8_unicode_ci整理。它包含以下行。除ASCII外,第二个字段 还包含Unicode代码点,例如U + 02C8(修改后的字母垂直行)和U + 02D0(修改后的字母三角行)。

 word   | ipa
--------+----------
 Hallo  | haˈloː
 IPA    | ˌiːpeːˈʔaː

我需要使用LIKE和REGEXP搜索第二个字段,但是MySQL(5.0.77)似乎在解释 这些字段以字节为单位,而不是字符。

SELECT * FROM pronunciation WHERE ipa LIKE '%ha?lo%';  -- 0 rows
SELECT * FROM pronunciation WHERE ipa LIKE '%ha??lo%'; -- 1 row

SELECT * FROM pronunciation WHERE ipa REGEXP 'ha.lo';  -- 0 rows
SELECT * FROM pronunciation WHERE ipa REGEXP 'ha..lo'; -- 1 row

我非常确定数据存储正确,因为在检索数据时它看起来不错,并且在phpMyAdmin中可以正常显示。我在共享主机上,因此我可以 “不是真的要安装程序。

如何解决此问题?如果不可能:是否有一个可行的解决方法,该方法不涉及每次使用PHP处理整个数据库?有4万行,我 我对使用MySQL(或UTF8)没有犹豫,我只能在主机上访问PHP和MySQL。

]编辑:有一个开放的有4年历史的MySQL错误报告,错误#30241正则表达式问题,它指出正则表达式引擎按字节工作。 因此,我正在寻找解决方法。

13
задан Tim 27 June 2011 в 07:07
поделиться