什么是德语最好的MySQL排序规则

问题描述 投票:17回答:3

我正在用德语建立一个网站,所以我将使用像ä, ü, ß等字符,所以你有什么建议?

mysql encoding collation
3个回答
24
投票

这个答案已经过时了。有关完整的表情符号支持,请参阅this answer

作为字符集,如果可以,绝对是UTF-8。

作为整理 - 对于具有特殊字符的语言来说,这有点令人讨厌。有各种类型的排序规则。他们都可以存储所有的变形金刚和其他角色,但他们在比较中如何对待变音符号,即是否

u = ü 

是真还是假;并且在排序中(在字母表中,变音符号位于排序顺序中)。

长话短说,你最好的选择是

utf8_unicode_ci

它允许不区分大小写的搜索;它将ß视为ss并使用DIN-1排序。可悲的是,像所有非二进制Unicode排序规则一样,它对待u = ü这是一个可怕的麻烦,因为搜索“Muller”也将返回“Müller”。您将不得不通过实时设置Umlaut-aware排序来解决这个问题。

或者utf8_bin

此排序规则没有u = ü问题,但只能进行区分大小写的搜索。

我不完全确定使用二进制排序规则是否还有其他副作用;我问了一个关于here的问题。


This mySQL manual page对各种校对及其在日常使用中带来的后果进行了很好的概述。

Here是mySQL中可用归类的概述。


6
投票

要支持完整的UTF-8标准,您必须在MySQL中使用charset utf8mb4和collat​​ion utf8mb4_unicode_ci

注意:当使用所谓的utf8字符集时,MySQL仅支持1到3个字节的字符!这就是现代Emojis不支持使用4字节的原因!

完全支持UTF-8标准的唯一方法是将所有表和数据库本身的charset和collat​​ion更改为utf8mb4utf8mb4_unicode_ci。此外,数据库连接也需要使用utf8mb4。

mysql服务器必须使用utf8mb4作为默认字符集,可以在/etc/mysql/conf.d/mysql.cnf中手动配置

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
# character-set-client-handshake = FALSE  ## better not set this!
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

可以使用以下SQL语句将现有表迁移到utf8mb4:

ALTER TABLE <table-name> CONVERT TO 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

注意:

  • 为了确保表格列之间的任何JOIN不会因字符集编码而减慢,所有表格都必须更改!
  • 由于MySQL中索引的长度有限,因此每个索引行的字符总数必须乘以4字节,并且需要小于3072

启用innodb_large_prefix配置选项时,对于使用DYNAMIC和COMPRESSED行格式的InnoDB表,此长度限制将增加到3072字节。

要更改数据库的charset和默认排序规则,请运行以下命令:

ALTER DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

由于utf8mb4完全向后兼容utf8,因此不应出现mojibake或其他形式的数据丢失。


3
投票

utf-8-general-ciutf-8-unicode-ci

要知道区别:UTF-8: General? Bin? Unicode?

© www.soinside.com 2019 - 2024. All rights reserved.