我已经阅读了很多关于在mysql中使用utf-8字符集的文章,讨论和教程。显然针对不同情况(例如转移到utf-8)引入了几种方法。创建和使用utf-8 mysql数据库需要什么样的appraoches?我所知道的方法:
CHARACTER SET utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT COLLATE utf8_general_ci
。DEFAULT CHARSET=utf8 COLLATE utf8_general_ci
。mysql_set_charset('utf8',$con);
。default-character-set = utf8
,collation-server = utf8_unicode_ci
,init-connect='SET NAMES utf8'
,character-set-server = utf8
使用utf-8字符集操作mysql数据库是否需要所有这些操作?如果没有,哪种方式最好?
答案 0 :(得分:3)
每个Unicode字符集并描述它们的区分属性最特殊的一个是utf8_bin
,用于比较二进制格式的字符。
utf8_general_ci比utf8_unicode_ci
略快,但不太准确(对于排序)。特定语言utf8编码(例如utf8_swedish_ci
)包含其他语言规则,使其最准确地对这些语言进行排序。大多数时候我使用utf8_unicode_ci
(我更喜欢精确到小的性能改进),除非我有充分的理由选择特定的语言。
您可以在MySQL手册上阅读有关特定unicode字符集的更多信息 - Unicode Character Sets
答案 1 :(得分:1)
如果为列指定{strong>字符编码,如utf8
,则意味着MySQL将使用该编码来存储文本。当您为数据库或表指定默认字符编码时,这意味着它们的列将具有该编码,除非您另有说明。这会影响数据在磁盘上占用的字节数:在latin1中,每个字符为1个字节,sjis为2个字节,在utf8中它会有所不同。如果您使用日语存储大量文本,则可能需要使用sjis而不是utf8。
如果为列指定{strong>排序规则,例如utf8_general_ci
,则意味着MySQL将在ORDER BY或索引中以不同方式排序数据。文化有不同的文本排序规则:例如瑞典语Ä是字母表的倒数第二个字母,而英语则相当于A.所以瑞典语校对你得到一个< b< ä和英语校对你得到一个=ä<湾您应该使用哪种排序规则主要取决于您的用户希望看到的内容。
然而,MySQL服务器所做的并不会影响MySQL客户端返回文本的方式:每个连接都有自己的客户端编码。客户端会自动将结果转换为连接编码,因此您无需关心服务器的功能。事实上,您可以使用不同编码的列进行选择,并且MySQL客户端正确地将所有内容转换为utf8或其他任何内容。
所以你真正需要担心的是设置连接编码,这就是你的#3所做的。可能在#4中设置名称也有效,但我不会依赖它。