【发布时间】:2013-09-21 23:20:15
【问题描述】:
当我在 MySQL 中进行 REGEXP 比较时,对于瑞典语字符的大写版本,我得到了一些奇怪的结果。我正在使用 utf8_swedish_ci 排序规则,我想找到大写的单词。
SELECT 'Öster' REGEXP BINARY '^[A-ZÅÄÖ][a-zåäö]+$' 应该返回 1,SELECT 'öster' REGEXP BINARY '^[A-ZÅÄÖ][a-zåäö]+$' 应该返回 0,但我得到相反的结果。
SELECT 'Öster' REGEXP BINARY '^[A-ZÅÄÖ][a-zåäö]+$' # returns 0 (incorrect)
SELECT 'öster' REGEXP BINARY '^[A-ZÅÄÖ][a-zåäö]+$' # returns 1 (incorrect)
SELECT 'Söder' REGEXP BINARY '^[A-ZÅÄÖ][a-zåäö]+$' # returns 1 (correct)
SELECT 'söder' REGEXP BINARY '^[A-ZÅÄÖ][a-zåäö]+$' # returns 0 (correct)
如果我使用 REGEXP 而不是 REGEXP BINARY,'söder' 也会匹配(这不是我想要的),但即便如此,'Öster' 也不是匹配的。
我该怎么办?
【问题讨论】:
-
请注意,utf8_swedish_ci 中的 _ci 代表不区分大小写。确保您运行的任何应用程序和终端也使用 utf-8,以便您输入的 SQL 实际上以 utf-8 形式发送到 mysql
-
@nos 是的,这就是我使用
BINARY的原因,它似乎适用于 A-Z、a-z 和 åäö,但不适用于 ÅÄÖ。我使用 phpMyAdmin 并将服务器连接排序规则更改为 utf8_swedish_ci。