我试图找出我应该用于各种类型数据的排序规则.我将存储的100%内容是用户提交的.
我的理解是我应该使用UTF-8通用CI(Case-Insensitive)而不是UTF-8 Binary.但是,我无法找到UTF-8 General CI和UTF-8 Unicode CI之间的区别.
这两个查询给了我完全相同的结果:
select * from topics where name='Harligt';
select * from topics where name='Härligt';
Run Code Online (Sandbox Code Playgroud)
这怎么可能?看起来像mysql在搜索时将åäö翻译成aao.有什么办法可以解决这个问题吗?
据我所知,我到处都使用utf-8编码.终端和php都会出现同样的问题.
我正在用德语建立一个网站,所以我将使用类似的字符ä, ü, ß,那么你有什么建议?
显然是一个非常罕见的问题,但IMO非常讨厌和错误:MySQL中的尾随空格不用于比较:
mysql> SELECT "A" = "A ";
+------------+
| "A" = "A " |
+------------+
| 1 |
+------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
在以下情况中,这尤其成问题:
mysql> SELECT COUNT(*) FROM eq WHERE name != TRIM(name);
+------------+
| COUNT(*) |
+------------+
| 0 |
+------------+
1 row in set (0.00 sec)
mysql> UPDATE eq SET name=TRIM(name);
Query OK, 866 row affected (0.01 sec)
Rows matched: 650907 Changed: 866 Warnings: 0
Run Code Online (Sandbox Code Playgroud)
有没有办法配置MySQL正确处理空白?
不幸的OpenCart是utf8_bin,我的表格整理是无法搜索名称中带有重音的产品名称.我在谷歌搜索,发现校对必须是utf8_general_ci兼容重音和不区分大小写的搜索.
如果我在搜索查询中添加整理声明怎么办?
SELECT *
FROM `address`
COLLATE utf8_general_ci
LIMIT 0 , 30
Run Code Online (Sandbox Code Playgroud)
它有任何(坏)副作用吗?我是关于索引,性能的问题?还是完全安全的?
我确信这里很多人都知道,处理德语元音变音和 UTF8 排序规则至少可以说是有问题的。a = \xc3\xa4像, o = \xc3\xb6,之类的东西u = \xc3\xbc不仅能够影响结果的排序顺序,而且还能影响实际结果。这里有一个例子,清楚地展示了简单地尝试区分名词的单数和复数版本(Bademantel- 单数,Badem\xc3\xa4ntel- 复数)会如何出错。
CREATE TABLE keywords (\n id INT (11) PRIMARY KEY AUTO_INCREMENT,\n keyword VARCHAR (255) NOT NULL\n) ENGINE = MyISAM DEFAULT CHARACTER\nSET = utf8 COLLATE = utf8_unicode_ci;\n\nINSERT INTO keywords (keyword) VALUES (\'Bademantel\'), (\'Badem\xc3\xa4ntel\');\n\nSELECT * FROM keywords WHERE keyword LIKE (\'%Badem\xc3\xa4ntel%\');\nRun Code Online (Sandbox Code Playgroud)\n\n结果应该是
\n\n+----+------------+\n| id | keyword |\n+----+------------+\n| 1 | Badem\xc3\xa4ntel |\n+----+------------+\nRun Code Online (Sandbox Code Playgroud)\n\n但utf8_unicode_ci输出是
+----+------------+\n| id | …Run Code Online (Sandbox Code Playgroud)