我正在建设一个德语网站,因此将使用像ä, ü, ß
等字符,您有什么建议?
这个答案已经过时了。想要完整的表情符号支持,请查看这个答案。
对于字符集,如果可以的话请使用UTF-8。
至于排序规则,对于带有特殊字符的语言会比较麻烦。有多种不同类型的排序规则,它们都能存储含有变音符号和其他特殊字符的字符串,但它们在排序时处理这些字符的方式不同,比如是否区分大小写、重音符号等等。
u = ü
真或假;在排序中(字母表中umlauts的位置)。
简而言之,您最好选择以下其中一个:
utf8_unicode_ci
它允许大小写不敏感的搜索; 它将ß
视为ss
并使用DIN-1排序。可惜,像所有非二进制Unicode排序一样,它也将u = ü
视为相同,这是一个很大的麻烦,因为搜索“Muller”也会返回“Müller”。您需要通过实时设置一个umlauts感知排序规则来解决这个问题。
或者 utf8_bin
此排序规则没有u = ü
的问题,但只能进行区分大小写的搜索。
我不确定使用二进制排序规则是否还有其他副作用;我在这里提出了一个相关问题。
这个MySQL手册页面为各种排序规则以及它们在日常使用中带来的后果提供了良好的概述。
这里是mySQL可用排序规则的概述。
[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;
注意:
当启用innodb_large_prefix配置选项时,对于使用DYNAMIC和COMPRESSED行格式的InnoDB表,这个长度限制被提高到3072字节。
要更改数据库的字符集和默认排序规则,请运行此命令:
ALTER DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
由于utf8mb4完全向后兼容utf8,因此不应发生任何乱码或其他形式的数据丢失。
utf-8-general-ci
或utf-8-unicode-ci
。
utf8_general_ci
或者 utf8_unicode_ci
。 - Tim Strehle这是一个重要的问题,因为它涉及到德语。使用utf8mb4_unicode_ci,字母u和ü是相同的。如果您有一个唯一索引(例如用户名),那么"blume"和"blüme"将无法工作,因为它们对于utf8mb4_unicode_ci来说是相同的单词(重复键错误)。为了解决这个问题,您可以使用utf8mb4_german2_ci。
utf8
存在缺陷(不是真正的Unicode),为什么你推荐它而不是utf8mb4
? - Pacerier