C语言连接mysql 中文字符乱码问题

时间:2020-12-01 06:33:41
我用C语言已经可以连接mysql数据库了
我需要用update命令修改一个数据类型为char的属性   并且是中文修改   总是出现乱码
update attendance_info set att_status=\'已到\' where sno=\'2010551511\'
命令如上  表明为attendance_info  要修改的属性为att_status   sno为学号
在mysql中用查询命令可以执行  但是一旦用C语言中的字符串执行就会在att_status中出现乱码  甚至无法修改
请问这个问题该如何解决

18 个解决方案

#1


中文乱码通常是多语言问题,char/varchar改成nchar/nvarchar类型试试

#2


你的字段att_status是什么类型的啊?改nvarchar就行了

#3


mysql中这些和你的字符编码有关系的。 

#4


引用 1 楼 DBA_Huangzj 的回复:
中文乱码通常是多语言问题,char/varchar改成nchar/nvarchar类型试试

我刚看了数据库字段  没有nchar和nvarchar啊 C语言连接mysql 中文字符乱码问题

#5


引用 2 楼 rockyljt 的回复:
你的字段att_status是什么类型的啊?改nvarchar就行了

att_status是char  但是我的mysql里面没有nvarchar和nchar类型...

#7


引用 6 楼 DBA_Huangzj 的回复:
mysql
有nvarchar、nchar http://wiki.ispirer.com/sqlways/mysql/data-types/nvarchar_n

是不是因为我字符集选择的是utf8--UTF-8 Unicode的关系所以在类型那个选项上找不到nchar和nvarchar
我用的是Navicat for MySQL管理mysql数据库,在Navicat for MySQL里面是真的没有nchar和nvarchar
可以请你告知我为什么吗?
或者教我怎样改成nchar和nvarchar数据类型   麻烦你了!

#8


这里是SQL Server,mysql我不怎么擅长,我要帮你移到mysql不?

#9


引用 8 楼 DBA_Huangzj 的回复:
这里是SQL Server,mysql我不怎么擅长,我要帮你移到mysql不?

呃  当初选的时候没太注意  如果你能帮我转过去  就太感谢你了!

#10


移过去了。。

#11


你的开发环境的字符编码是什么?

在数据库执行

show variables like 'character%'

贴出结果

#12


引用 11 楼 benluobobo 的回复:
你的开发环境的字符编码是什么?

在数据库执行

show variables like 'character%'

贴出结果

C语言连接mysql 中文字符乱码问题
麻烦你了!

#13


引用 10 楼 DBA_Huangzj 的回复:
移过去了。。

谢谢你 C语言连接mysql 中文字符乱码问题

#14


检查一下C中的连接字符串?

#15


引用 14 楼 ACMAIN_CHM 的回复:
检查一下C中的连接字符串?

连接字符串真的没有问题  只要不是中文就能修改  一用中文有时候乱码  有时候就完全没有修改 和具体写的中文的值有关系  但是显示查询语句成功

#16


连接字符串中可以设置字符集。

#17


引用 16 楼 ACMAIN_CHM 的回复:
连接字符串中可以设置字符集。

懂了   我先去看看

#18


我明白了
C语言使用的字符集是gbk
在建立了连接之后  需要使用set names gbk命令来告诉mysql数据库客户端的字符集  连接的字符集  还有结果集的字符集
谢谢各位的帮助   各位的帮助让我知道了问题的方向才能找到自己的问题  谢谢各位!

#1


中文乱码通常是多语言问题,char/varchar改成nchar/nvarchar类型试试

#2


你的字段att_status是什么类型的啊?改nvarchar就行了

#3


mysql中这些和你的字符编码有关系的。 

#4


引用 1 楼 DBA_Huangzj 的回复:
中文乱码通常是多语言问题,char/varchar改成nchar/nvarchar类型试试

我刚看了数据库字段  没有nchar和nvarchar啊 C语言连接mysql 中文字符乱码问题

#5


引用 2 楼 rockyljt 的回复:
你的字段att_status是什么类型的啊?改nvarchar就行了

att_status是char  但是我的mysql里面没有nvarchar和nchar类型...

#6


#7


引用 6 楼 DBA_Huangzj 的回复:
mysql
有nvarchar、nchar http://wiki.ispirer.com/sqlways/mysql/data-types/nvarchar_n

是不是因为我字符集选择的是utf8--UTF-8 Unicode的关系所以在类型那个选项上找不到nchar和nvarchar
我用的是Navicat for MySQL管理mysql数据库,在Navicat for MySQL里面是真的没有nchar和nvarchar
可以请你告知我为什么吗?
或者教我怎样改成nchar和nvarchar数据类型   麻烦你了!

#8


这里是SQL Server,mysql我不怎么擅长,我要帮你移到mysql不?

#9


引用 8 楼 DBA_Huangzj 的回复:
这里是SQL Server,mysql我不怎么擅长,我要帮你移到mysql不?

呃  当初选的时候没太注意  如果你能帮我转过去  就太感谢你了!

#10


移过去了。。

#11


你的开发环境的字符编码是什么?

在数据库执行

show variables like 'character%'

贴出结果

#12


引用 11 楼 benluobobo 的回复:
你的开发环境的字符编码是什么?

在数据库执行

show variables like 'character%'

贴出结果

C语言连接mysql 中文字符乱码问题
麻烦你了!

#13


引用 10 楼 DBA_Huangzj 的回复:
移过去了。。

谢谢你 C语言连接mysql 中文字符乱码问题

#14


检查一下C中的连接字符串?

#15


引用 14 楼 ACMAIN_CHM 的回复:
检查一下C中的连接字符串?

连接字符串真的没有问题  只要不是中文就能修改  一用中文有时候乱码  有时候就完全没有修改 和具体写的中文的值有关系  但是显示查询语句成功

#16


连接字符串中可以设置字符集。

#17


引用 16 楼 ACMAIN_CHM 的回复:
连接字符串中可以设置字符集。

懂了   我先去看看

#18


我明白了
C语言使用的字符集是gbk
在建立了连接之后  需要使用set names gbk命令来告诉mysql数据库客户端的字符集  连接的字符集  还有结果集的字符集
谢谢各位的帮助   各位的帮助让我知道了问题的方向才能找到自己的问题  谢谢各位!