Linux执行MYSQL的SQL语句时,如果要插入中文怎么办?

u010867462 2014-04-25 05:07:31
加精
RT:
MYSQL_QUERY 参数是char字符串
但是中文是宽字符,假如我使用sprintf()函数根本不行,
char szSql[200];
wchar_t szName = L"我勒个去";
sprintf(szSql, "INSERT INTO TableName (Name) VALUES ('%ls')", szName);
我只能说这样的szSql是"INSERT INTO TableName (Name) VALUES (' "
因为宽字符里面会存在0x0015这样的字符,写入我的查询字符串之后,我的字符串就截断了,使用MYSQL_REAL_QUERY? 我是一个LINUX服务器,在WINDOWS端发来数据,让服务器插入数据,我是使用一个结构体,在WINDOWS端使用TCHAR,在LINUX端使用wchar_t,这样做能行不,会不会出现字符集不匹配,例如"我"这个字,在WINDOWS端解析成0X0650 在LINUX端解析成0X0611会不会出现这种情况,还有就是要匹配我的WINDOWS字符集,我的MYSQL字符集应该选择GBK还是UTF8?

字符集这个问题 求大神详解。
执行SQL这个问题,求大神详解。
高分,我有多少分给多少分。
只求能够速度搞定这个问题,以前听说CSDN大神很多,现在想来请教一下!
...全文
3810 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Samlerieltan 2016-04-14
  • 打赏
  • 举报
回复
就用char,根本用不到宽字符,只要你数据库的编码和显示时的编码一致就可以正常显示中文了
赵4老师 2016-04-14
  • 打赏
  • 举报
回复
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
wjlsmail 2016-04-14
  • 打赏
  • 举报
回复
转换为widechar就可以了吧
yangyunzhao 2016-04-14
  • 打赏
  • 举报
回复
如果不在mysql中查询这列,直接把它当做blob处理好了。ui显示的时候自己编解码
chehw_1 2016-04-14
  • 打赏
  • 举报
回复
数据库服务器和客户端统一使用 utf8编码。 客户端程序在调用 mysql_real_connect成功后, 手工指定字符编码: mysql_set_character_name(conn, "utf8"); // 默认一般为latin1
cocoabird 2016-04-14
  • 打赏
  • 举报
回复
试试
N'我勒个去'
caowhgzs 2016-04-14
  • 打赏
  • 举报
回复
建议用UTF8吧,为了代码兼容性我一般不用GBK字符集。
line_us 2016-04-14
  • 打赏
  • 举报
回复
的确是个头疼的问题
visualmemory 2016-04-13
  • 打赏
  • 举报
回复
搞定了问题也不说解决方法。 MYSQL的C API要将字符串转换成char*。 "UNICODE 字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求。” 关于字符编码的问题网上有很多文章可以参考。http://www.regexlab.com/zh/encoding.htm 中文乱码设置成gbk
u010867462 2014-04-26
  • 打赏
  • 举报
回复

今天搞定了编码问题,现在烦恼的是这个,linux上面运行mysql进行插入查询,插入中文之后,数据库里面存放的就是???????这种乱码,这是什么原因是我的my.cnf没有配置正确吗?我的my.cnf放在了/etc下面和/usr/etc下面。这样行吗,内容是。
[client]

default-character-set=utf8

[mysqld]

default-character-set=utf8
有问题吗? 求大神解决。。 有100分高分和长期关注为回报。
  • 打赏
  • 举报
回复
我表示我看不懂,旋旋
buyong 2014-04-25
  • 打赏
  • 举报
回复
字符集是大问题。 建议你还是多实验,在linux上先把sql试好。然后在windows上打印出sql,看是否一致。 linux一般是utf8,不过和mysql的配置设定有关。 windows一般是ansi,不过你的工程也可以自定字符集。
u010867462 2014-04-25
  • 打赏
  • 举报
回复
唉,帖子就这么沉了,说好的CSDN的大神呢。。就不能帮帮我?
u010867462 2014-04-25
  • 打赏
  • 举报
回复
大哥,wsprintf针对的目标是wchar_t 意思就是他是填充一个wchar_t字符串,但是执行MySQL查询函数是用char字符串,所以不能用wsprintf啊。有别的解决方案不?难道没有大神写linux执行mysql查询底层的大神啊 求助啊 求助啊!!!
Isnis-fallen 2014-04-25
  • 打赏
  • 举报
回复
sprintf有宽字符版本啊
u010867462 2014-04-25
  • 打赏
  • 举报
回复
大神们,求救啊,问题的核心是执行MYSQL_REAL_QUERY; 因为我的szSql是"INSERT INTO TableName (Name) VALUES (' " 到宽字符串的时候就断掉了啊。 原以为是\0截断所以我用了for(int i = 0; i < 200; i++){std::wcout << szSql[i];} 到了宽字符那个地方还是错的 我已经无力了。 求大神帮助。。。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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