注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

眼睛想旅行

技术就是我的生命与信仰!

 
 
 

日志

 
 
关于我

精通C,C++,python,Erlang。并熟悉各种其他编程语言,用cocos2dx游戏引擎作过几个项目。会MySQL增删改查,了解OpenGL渲染原理。懂单片机,能设计数字电路系统,会画电路图和设计电路板。喜欢了解最新前沿技术,并持续关注和学习新技术。

网易考拉推荐

mysql-python中文数据错误  

2017-02-23 20:05:49|  分类: Python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
使用中文常常有因为编码引起的程序错误,或者中文乱码的问题,这里一次解决.
 像下边这样的错误:
1366 Incorrect string value: '\xE8\x82\x96\xE5\xB1\xB1...' for column 'sub_station_name'
首先,对于远程调用mysql命令的方式,有两个地方的编码要注意,
1. 一个是数据库中的数据项要设置成utf8,
2.另一个是在创建mysql连接时,要设置charset="utf8"的这个参数.
只要这两个地方都设置对了,那么mysql数据库环境就没有问题了,有问题就是我们发送给mysql的命令中的中文的编码有可能不是utf8,
1366主要是因为中文编码引起的,虽然数据库里的数据表和数据项我都设置为utf8了,但远程插入数据时还是会出这个错误,原因是因为发送给mysql的命令中有中文,而且这个中文不是utf8编码.
知道了原因,那接下来就是要先看文本是什么编码,然后再把这个中文转成utf8.真对python的中文转码有下边方法:
首先,使用chardet的python库判断中文是什么编码.

import chardet

f = open('cntext.txt','r')

tmpstr = f.read()

f.close()

cnstrtype = chardet.detect(tmpstr)

print cnstrtype

这个时候,我们可以看到输出是:
{'confidence': 0.99, 'encoding': 'GB2312'}
这是一个dict数据.第一个参数是测出的编码可能性,后一个是测出的编码名
知道了中文编码后,接下来就是要把这个中文转成utf8编码的.可以使用下边的方法

utf8str = tmpstr.decode(cntype).encode('utf-8')

newtype = chardet.detect(utf8str)
print newtype

这里先使用了decode()对原来的"GB2312"解码成unicode编码,然后再使用encode()对unicode编码为'utf-8'.这里可以看到打印的输出为:
{'confidence': 0.99, 'encoding': 'utf-8'}
然后在mysql的命令中使用这个utf8编码后的字符串就可以了.

python上安装mysql的访问库,请看之前的文章:
  评论这张
 
阅读(25)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017