Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-为什么德国字符的LIKE运算符会忽略排序规则_Mysql_Collation_Sql Like_Diacritics - Fatal编程技术网

MySQL-为什么德国字符的LIKE运算符会忽略排序规则

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 |

我正在MySQL 5.0.88上使用utf8字符集和utf8\U unicode\U ci排序规则运行以下select语句:

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 |
+--------------------------------------+