连接器/ C的MySQL字符编码

时间:2016-07-15 15:04:15

标签: mysql c character-encoding

MySQL的字符编码机制在其复杂性和不透明性方面具有传奇色彩,我对如何正确解释从MySQL Connector / C查询返回的字符串数据有疑问

如果我的Connector / C代码设置为UTF-8(使用mysql_set_character_set()),MySQL库(和/或服务器)是否会转储latin1中存储的数据在服务器中UTF-8还是我仍然需要在每个字段的基础上使用mysql_fetch_field来确定任何字符串数据的字符集?

2 个答案:

答案 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用于编码错误的字符串,并根据具体情况自行转换。假设在任何地方进行正确的配置和编码是有风险的。