MySQL-为什么德国字符的LIKE运算符会忽略排序规则
我正在MySQL 5.0.88上使用utf8字符集和utf8\U unicode\U ci排序规则运行以下select语句:MySQL-为什么德国字符的LIKE运算符会忽略排序规则,mysql,collation,sql-like,diacritics,Mysql,Collation,Sql Like,Diacritics,我正在MySQL 5.0.88上使用utf8字符集和utf8\U unicode\U ci排序规则运行以下select语句: SELECT * FROM table WHERE surname = 'abcß'; +----+-------------------+------+ | id | forename | surname | +----+-------------------+------+ | 1 | a | abcß | | 2 |
SELECT * FROM table WHERE surname = 'abcß';
+----+-------------------+------+
| id | forename | surname |
+----+-------------------+------+
| 1 | a | abcß |
| 2 | b | abcss |
+----+-------------+------------+
根据utf8_unicode_ci的德国特殊charß=ss,但为什么它只与=运算符一起工作而不与LIKE一起工作?我有一个电话簿应用程序,我迫切需要这两个东西一起工作
根据SQL标准,LIKE按每个字符执行匹配,
因此,它可以产生不同于=比较运算符的结果:
mysql> SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci;
+-----------------------------------------+
| 'ä' LIKE 'ae' COLLATE latin1_german2_ci |
+-----------------------------------------+
| 0 |
+-----------------------------------------+
mysql> SELECT 'ä' = 'ae' COLLATE latin1_german2_ci;
+--------------------------------------+
| 'ä' = 'ae' COLLATE latin1_german2_ci |
+--------------------------------------+
| 1 |
+--------------------------------------+
来源:什么显示变量,如“%collation%”,以及从您的表中显示完整字段?排序规则必须完全相同。表中所有varchar字段的排序规则都设置为utf8\U unicode\U ci+一些完全没有排序规则的int字段。+1非常有趣的问题,喜欢听答案。排序规则连接是utf8\U unicode\U ci,排序规则数据库是utf8\U unicode\U ci,排序规则服务器是latin1\U swedish\U ci。然而,我认为服务器排序规则被数据库排序规则覆盖,否则我无法解释它为什么与=operatorhanks Karolis一起工作。似乎我不能两者兼得,这对于一个有很多特殊字符的大型电话簿应用程序来说太糟糕了。也许mysql全文搜索可以作为一种替代。
mysql> SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci;
+-----------------------------------------+
| 'ä' LIKE 'ae' COLLATE latin1_german2_ci |
+-----------------------------------------+
| 0 |
+-----------------------------------------+
mysql> SELECT 'ä' = 'ae' COLLATE latin1_german2_ci;
+--------------------------------------+
| 'ä' = 'ae' COLLATE latin1_german2_ci |
+--------------------------------------+
| 1 |
+--------------------------------------+