高分求解!!关于mysql C语言代码中插入中文的问题(中文乱码)!高手速来人傻分多

bandaoyu 2018-05-19 05:47:06
#背景-------------------------------------------------------------------------------

客户端语言 C#
服务器端语言 C
IDE VS

数据库mysql


mysql字符集配置:

character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

tb的字符集选择的是UTF-8

#现象-------------------------------------------------------------------------------

客户端是C#,有一个中文名称ch_name,C#将ch_name“中文”转成UTF8编码格式,然后存入buff中,发送到服务端,


服务器端收到buff后,拼接SQL语句

spritf(sqlstr,“INSERT INTO tb(id,name) VALUES(1,%s)",buff);


然后服务器端的C程序调用mysql_real_query(mysql,sqlstr,len) 插入数据库

也就是大体流程是:C# 中文->utf8 格式->buff ===》服务端 INSERT INTO tb(id,name) VALUES(1,buff) 插入数据库。

#疑问-------------------------------------------------------------------------------

请问此时,数据库中保存的ch_name是UTF8编码格式吗?

为什么此时我用第三方可视化工具navicat 链接查看(链接的字符集选择“使用mysql字符集”),此时看到的是乱码。


但是当我修改navicat 链接属性,去掉 “使用mysql字符集” 前面的勾选,选择65001(UTF-8),此时我在navicat 里再次查看记录,中文显示正常。

在navicat 中查询链接的字符集,显示的却是:

character_set_client latin1
character_set_connection latin1
character_set_database latin1
character_set_filesystem binary
character_set_results latin1
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

奇怪,mysql已经设置了全局---(也就是修改了my.cnf配置文件了),工具链接上之后不应该和数据库的配置同步吗?

character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8


为什么在navicat的character_set_results latin1 窗口显示的记录才正常显示中文呢?

...全文
990 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bandaoyu 2018-06-01
  • 打赏
  • 举报
回复
dingshangqu kdkdkdkdddddddddddd
bandaoyu 2018-05-30
  • 打赏
  • 举报
回复
引用 6 楼 ckc 的回复:
运行mysqld --verbose --help 得到 character-set-client-handshake TRUE character-set-filesystem binary character-set-server gbk character-sets-dir /usr/share/mysql/charsets/ 其它的你设置了未必起作用
我的mysql 已经是服务程序,启动都是 service mysqld start ,直接运行你这个命令找不到的。 另外你这个mysqld --verbose --help 和我在my.cnf中的设置有什么区别?
ckc 2018-05-29
  • 打赏
  • 举报
回复
运行mysqld --verbose --help 得到 character-set-client-handshake TRUE character-set-filesystem binary character-set-server gbk character-sets-dir /usr/share/mysql/charsets/ 其它的你设置了未必起作用
ckc 2018-05-28
  • 打赏
  • 举报
回复
服务器端配置文件中只能设置数据库的、服务器的这些它能控制的字符集 客户端相关的字符集客户端自己做主吧
bandaoyu 2018-05-28
  • 打赏
  • 举报
回复
引用 4 楼 ckc 的回复:
服务器端配置文件中只能设置数据库的、服务器的这些它能控制的字符集 客户端相关的字符集客户端自己做主吧
既然这样,那这两个 character_set_client utf8 character_set_connection utf8 有什么意义呢?
bdview 2018-05-26
  • 打赏
  • 举报
回复
引用 2 楼 bandaoyu 的回复:
[quote=引用 1 楼 ACMAIN_CHM 的回复:] 检查C连接字符串中的字符集设置。
引用
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx MySQL 中文显示乱码
找到问题的原因列,你上面的文章都没提到。那就是C语言 mysql_real_connect 之后,还需要调用一次mysql_set-character_set(mysql,"utf8") 很坑。为何我在服务端配置(修改my.cnf文件)的mysql字符集为: character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server utf8 character_set_system utf8 character_sets_dir /usr/share/mysql/charsets/ 但是我C程序调用C api链接数据库后,用mysql_get_character_set_info(&mysql, &cs); 查看到的字符集仍然为latin1?[/quote] character_set_client 这个设置 好像只是告诉服务器,连接送来的数据按character_set_client 设置的编码解析
ACMAIN_CHM 2018-05-21
  • 打赏
  • 举报
回复
检查C连接字符串中的字符集设置。
引用
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx MySQL 中文显示乱码
bandaoyu 2018-05-21
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
检查C连接字符串中的字符集设置。
引用
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx MySQL 中文显示乱码
找到问题的原因列,你上面的文章都没提到。那就是C语言 mysql_real_connect 之后,还需要调用一次mysql_set-character_set(mysql,"utf8") 很坑。为何我在服务端配置(修改my.cnf文件)的mysql字符集为: character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server utf8 character_set_system utf8 character_sets_dir /usr/share/mysql/charsets/ 但是我C程序调用C api链接数据库后,用mysql_get_character_set_info(&mysql, &cs); 查看到的字符集仍然为latin1?

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧