免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 14411 | 回复: 23

【讨论中】将乱码插入数据库失败 [复制链接]

论坛徽章:
0
发表于 2013-07-01 10:27 |显示全部楼层
本帖最后由 cenalulu 于 2013-07-01 12:57 编辑

cs模型,client(一个应用程序)发送一则消息(比如消息内容为“我爱北京天安门”)到服务器这边来,然后服务器将其存入数据库,失败了
确定插入到数据库中的这个消息是乱码的;

但是单独写程序测试,也是发送一串数据到服务器,服务器收到这个消息也是乱码的,但是却可以插入到数据库中;从数据库中取出来发送到client,client也能成功解码得到原来的消息
有两个问题
1.为什么单独写程序测试就没有失败呢?
2.有没有什么方法直接将乱码插入数据库呢?或者其他方法,比如将乱码进行编码为二进制再存入数据库,从数据库中取出来时再解码之类的方法

论坛徽章:
8
CU大牛徽章
日期:2013-09-18 15:20:48CU大牛徽章
日期:2013-09-18 15:20:58CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:17天秤座
日期:2013-10-30 14:01:03摩羯座
日期:2013-11-29 18:02:31luobin
日期:2016-06-17 17:46:36
发表于 2013-07-01 11:28 |显示全部楼层
@chengmao2010
从应用上看,数据库只是存储,不太关心字符集。你没有写成功,对半是你的乱码包含了特殊字符。导致服务器解析出错。解决方案是最好规范字符集,将client和数据库的字符集设置为一样。

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
发表于 2013-07-01 13:00 |显示全部楼层
答一:请给到具体的报错信息才能判断具体是在哪一层发生的错误
答二:楼主描述的这种方式就是常说的“错进错出” ,一般做法就是把mysql端的所有charset都设置成latin。具体的乱码解析放到程序去处理。
当然错进错出并不推荐,这对备份恢复,数据处理等等都会带来很多麻烦

论坛徽章:
0
发表于 2013-07-01 16:34 |显示全部楼层
本帖最后由 chengmao2010 于 2013-07-01 16:35 编辑

回复 3# cenalulu


    这个是mysql的报错

mysql报错

mysql报错

其中红色就是乱码的部分

论坛徽章:
0
发表于 2013-07-01 16:39 |显示全部楼层
回复 3# cenalulu


    单独写一个client测试,也是乱码,但是写入数据库成功,没有报错
QQ截图20130701163617.png

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
发表于 2013-07-01 17:13 |显示全部楼层
第一张图里面的乱码影响到mysql对于SQL的解析了,所以报错。

论坛徽章:
0
发表于 2013-07-01 17:36 |显示全部楼层
回复 6# cenalulu


    恩,这个明白;
但是直接写一个程序测试,服务器接收的数据也是乱码,但是却可以写入数据库,不明白为什么会这样
刚接触数据库,不好意思

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
发表于 2013-07-01 17:41 |显示全部楼层
回复 7# chengmao2010


推测应该是程序处理的时候把乱码里特殊字符转义了,这时候数据库虽然接收到字面上看上去一样的内容,但实际上是一个完整的可处理的字符串了。

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
发表于 2013-07-01 17:45 |显示全部楼层
客户端执行下 show variables like '%char%' 贴下结果。
顺带问下命令行客户端中的乱码是通过什么方式打出来的?

论坛徽章:
0
发表于 2013-07-01 17:47 |显示全部楼层
本帖最后由 chengmao2010 于 2013-07-01 17:47 编辑

回复 9# cenalulu

这是编码截图
   
那个打印乱码是在c++里面,直接将内容输出到屏幕的

编码

编码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP