我正在建立一个德语网站,所以我会使用像ä, ü, ß等字符,那么你的建议是什么?
ä, ü, ß
kx5bkwkv1#
这个答案已经过时了。有关完整的emoji支持,请参阅this answer。作为字符集,如果可以的话,绝对是UTF-8。作为排序规则--这对于具有特殊字符的语言来说有点麻烦。有各种类型的排序规则。它们都可以存储所有变音和其他字符,但它们在比较中如何处理变音方面有所不同,即是否
u = ü
是真是假;以及排序(其中在字母表中变音位于排序顺序中)。长话短说,你最好的选择是
utf8_unicode_ci
它允许不区分大小写的搜索;它将ß视为ss,并使用DIN-1排序。可悲的是,像所有非二进制Unicode排序规则一样,它处理u = ü,这是一个可怕的麻烦,因为搜索“Muller”也会返回“Müller”。你必须通过真实的设置一个识别变音的校对来解决这个问题。或**utf8_bin**这种排序规则没有u = ü问题,但只能进行区分大小写的搜索。我不完全确定使用二进制排序规则是否有其他副作用;我问了一个关于here的问题。This mySQL manual page很好地概述了各种排序规则以及它们在日常使用中带来的后果。Here是mySQL中可用排序规则的概述。
ß
ss
utf8_bin
9rnv2umw2#
要支持完整的UTF-8标准,必须在MySQL中使用字符集utf8mb4和排序规则utf8mb4_unicode_ci!
utf8mb4
utf8mb4_unicode_ci
**注意:**MySQL的utf8 charset只支持1- 3字节字符!这就是为什么现代的表情符号不受支持,因为它们使用4字节!
utf8
完全支持UTF-8标准的唯一方法是将所有表和数据库本身的字符集和排序规则更改为utf8mb4和utf8mb4_unicode_ci。另外,数据库连接也需要使用utf8 mb 4。mysql服务器必须使用utf8 mb 4作为默认字符集,可以在/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语句将现有表迁移到utf8 mb 4:
ALTER TABLE <table-name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
注意事项:
启用innodb_large_prefix配置选项后,对于使用DYNAMIC和COMPRESSED行格式的InnoDB表,此长度限制将提高到3072字节。要更改数据库的字符集和默认排序规则,请运行以下命令:
ALTER DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
由于utf8 mb 4与utf8完全向后兼容,因此不会发生乱码或其他形式的数据丢失。
ua4mk5z43#
utf-8-general-ci或utf-8-unicode-ci。要知道区别:UTF-8: General? Bin? Unicode?
utf-8-general-ci
utf-8-unicode-ci
sdnqo3pr4#
上面的评论并没有真正解决德语元音变音的具体问题,这通常被描述为:字典顺序还是电话簿顺序?Unicode默认值对于前者是可以的,但如果(例如)你想要'Ü' = 'UE',那么你可以考虑utf8mb4_de_pb_0900_ai_ci或utf8mb4_german2_ci,假设字符集是utf8mb4。
jtoj6r0c5#
一件重要的事情,因为这是关于德语的。使用utf8mb4_unicode_ci,字母u和ü是相同的。如果你有一个唯一的索引(例如对于用户名),则“blume”和“blüme”将不起作用,因为它们对于utf8mb4_unicode_ci是相同的单词(* 重复键错误 *)。要解决此问题,可以使用utf8mb4_german2_ci
5条答案
按热度按时间kx5bkwkv1#
这个答案已经过时了。有关完整的emoji支持,请参阅this answer。
作为字符集,如果可以的话,绝对是UTF-8。
作为排序规则--这对于具有特殊字符的语言来说有点麻烦。有各种类型的排序规则。它们都可以存储所有变音和其他字符,但它们在比较中如何处理变音方面有所不同,即是否
是真是假;以及排序(其中在字母表中变音位于排序顺序中)。
长话短说,你最好的选择是
utf8_unicode_ci
它允许不区分大小写的搜索;它将
ß
视为ss
,并使用DIN-1排序。可悲的是,像所有非二进制Unicode排序规则一样,它处理u = ü
,这是一个可怕的麻烦,因为搜索“Muller”也会返回“Müller”。你必须通过真实的设置一个识别变音的校对来解决这个问题。或**
utf8_bin
**这种排序规则没有
u = ü
问题,但只能进行区分大小写的搜索。我不完全确定使用二进制排序规则是否有其他副作用;我问了一个关于here的问题。
This mySQL manual page很好地概述了各种排序规则以及它们在日常使用中带来的后果。
Here是mySQL中可用排序规则的概述。
9rnv2umw2#
要支持完整的UTF-8标准,必须在MySQL中使用字符集
utf8mb4
和排序规则utf8mb4_unicode_ci
!**注意:**MySQL的
utf8
charset只支持1- 3字节字符!这就是为什么现代的表情符号不受支持,因为它们使用4字节!完全支持UTF-8标准的唯一方法是将所有表和数据库本身的字符集和排序规则更改为
utf8mb4
和utf8mb4_unicode_ci
。另外,数据库连接也需要使用utf8 mb 4。mysql服务器必须使用utf8 mb 4作为默认字符集,可以在/etc/mysql/conf.d/mysql.cnf中手动配置
可以使用以下SQL语句将现有表迁移到utf8 mb 4:
注意事项:
启用innodb_large_prefix配置选项后,对于使用DYNAMIC和COMPRESSED行格式的InnoDB表,此长度限制将提高到3072字节。
要更改数据库的字符集和默认排序规则,请运行以下命令:
由于utf8 mb 4与utf8完全向后兼容,因此不会发生乱码或其他形式的数据丢失。
ua4mk5z43#
utf-8-general-ci
或utf-8-unicode-ci
。要知道区别:UTF-8: General? Bin? Unicode?
sdnqo3pr4#
上面的评论并没有真正解决德语元音变音的具体问题,这通常被描述为:字典顺序还是电话簿顺序?Unicode默认值对于前者是可以的,但如果(例如)你想要'Ü' = 'UE',那么你可以考虑utf8mb4_de_pb_0900_ai_ci或utf8mb4_german2_ci,假设字符集是utf8mb4。
jtoj6r0c5#
一件重要的事情,因为这是关于德语的。使用utf8mb4_unicode_ci,字母u和ü是相同的。如果你有一个唯一的索引(例如对于用户名),则“blume”和“blüme”将不起作用,因为它们对于utf8mb4_unicode_ci是相同的单词(* 重复键错误 *)。要解决此问题,可以使用utf8mb4_german2_ci