【发布时间】:2011-05-23 17:13:50
【问题描述】:
我有一个数据库,我们在其中存储每个名称的首字母大写的用户名——例如,IsaacSparling。我正在尝试对我的 MySQL (v5.1.46) 数据库进行不区分大小写的自动完成。表有一个 UTF8 字符集和一个 utf8_unicode_ci 排序规则。我也针对 utf8_general_ci 排序规则进行了这些测试。
纯 ASCII 文本可以正常工作:
mysql> select username from users where username like 'j%';
+----------------+
| username |
+----------------+
| J******** |
| J*********** |
| J************* |
+----------------+
3 rows in set (0.00 sec)
mysql> select username from users where username like 'J%';
+----------------+
| username |
+----------------+
| J******** |
| J*********** |
| J************* |
+----------------+
3 rows in set (0.00 sec)
(名称已编辑,但它们在那里)。
但是,当我尝试对 ASCII 集之外的 unicode 字符执行相同操作时,没有这样的运气:
mysql> select username from users where username like 'ø%';
Empty set (0.00 sec)
mysql> select username from users where username like 'Ø%';
+-------------+
| username |
+-------------+
| Ø********* |
+-------------+
1 row in set (0.00 sec)
一些调查让我知道:http://bugs.mysql.com/bug.php?id=19567(tl;dr,这是 unicode 排序规则的一个已知错误,修复它是“新功能”优先级 - 即,不会在任何时候完成合理的时间范围)。
有没有人发现任何有效的解决方法,允许在 MySQL 中不区分大小写地搜索 unicode 字符?任何想法表示赞赏!
【问题讨论】:
-
有趣的问题!据我了解这个错误,它与你的问题无关吗?这似乎与口音敏感度有关
a=>á -
你能检查
where LOWER(username) LIKE 'ø%'是否有效吗?它可能会受到相同行为的影响,但如果不是,它可能会作为一种解决方法 -
mysql> 从 LOWER(username) LIKE 'ø%' 的用户中选择 1;空组(0.00 秒)没有骰子。似乎 ascii 集之外的 unicode 字符的大小写转换完全无聊。不过感谢您的想法!
标签: mysql unicode collation case-insensitive