MySQL的字符编码机制在其复杂性和不透明性方面具有传奇色彩,我对如何正确解释从MySQL Connector / C查询返回的字符串数据有疑问
如果我的Connector / C代码设置为UTF-8
(使用mysql_set_character_set()
),MySQL库(和/或服务器)是否会转储latin1
中存储的数据在服务器中UTF-8
还是我仍然需要在每个字段的基础上使用mysql_fetch_field
来确定任何字符串数据的字符集?
答案 0 :(得分:2)
将此页面翻译为:http://dev.mysql.com/doc/refman/5.7/en/charset-connection.html
由于mysql_set_character_set()
的作用类似于SET NAMES
,因此它将修改服务器发送回客户端的字符集。
SET NAMES表示客户端将用于将SQL语句发送到服务器的字符集。因此,SET NAMES'cp1251'告诉服务器,“来自此客户端的未来传入消息是字符集cp1251。”它还指定了服务器用于将结果发送回客户端的字符集。 (例如,如果使用SELECT语句,它指示要用于列值的字符集。)
答案 1 :(得分:0)
在Latin1和UTF-8中正确编码的字符串之间发生冲突是极不可能的。您可以检查正确的UTF-8编码,并假设Latin1用于编码错误的字符串,并根据具体情况自行转换。假设在任何地方进行正确的配置和编码是有风险的。