我正在用德语建立一个网站,所以我将使用ä, ü, ß
等字符,那么你有什么建议?
答案 0 :(得分: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中可用的归类。
答案 1 :(得分:6)
要支持完整的UTF-8标准,您必须在MySQL中使用charset utf8mb4
和排序规则utf8mb4_unicode_ci
!
注意: MySQL在使用其所谓的utf8
字符集时仅支持1到3个字节的字符!这就是现代Emojis不支持的原因,因为它们使用4个字节!
完全支持UTF-8标准的唯一方法是将所有表格和数据库本身的字符集和整理更改为utf8mb4
和utf8mb4_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;
注意:
启用innodb_large_prefix配置选项时,这个 对于使用的InnoDB表,长度限制增加到3072字节 DYNAMIC和COMPRESSED行格式。
要更改数据库的charset和默认排序规则,请运行以下命令:
ALTER DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
由于utf8mb4完全向后兼容utf8,因此不应发生mojibake或其他形式的数据丢失。
答案 2 :(得分:3)
utf-8-general-ci
或utf-8-unicode-ci
。