今天遇到一个问题,用Python往MySQL插入数据时,若数据中包含中文会报类似下面的错误:

ERROR 1366: Incorrect string value: '\xE4\xB8\xAD\xE5\x9B\xBD' for column 'tname' at row 1

但若之间在MySQL命令行中插入,就不会报错。

后来找到解决办法:

步骤1:

  在 MySQL 的安装目录下有一个 my.ini 配置文件,通过修改这个配置文件可以解决乱码问题。在这个配置文件中 [mysql] 与客户端配置相关,[mysqld] 与服务器配置相关。默认使用latin1字符集,改成gbk或utf-8,然后重启MySQL服务:
  

[mysql]
default-character-set=latin1 改成 default-character-set=utf8 或者 default-character-set=gbk
[mysqld]
character-set-server=latin1 改成 character-set-server=utf8 或者 character-set-server=gbk

重启MySQL服务之后,在建立新表时,字符串字段就会默认使用utf-8编码。

另外,在建立新表时,可以通过sql语句:DEFAULT CHARSET=gbk来指定使用gbk字符集。如:

CREATE TABLE `phonecalls` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`starttime` varchar(32) DEFAULT NULL COMMENT '通话起始时间',
`location` varchar(20) DEFAULT NULL COMMENT '通话地点',
`initiateType` varchar(10) DEFAULT NULL COMMENT '呼叫类型-主叫:1,被叫:2',
`talkTo` varchar(16) DEFAULT NULL COMMENT '对方号码',
`callDuration` tinyint(4) DEFAULT NULL COMMENT '通话时长,不足一分钟按一分钟计算',
`callDurationExact` varchar(20) DEFAULT NULL COMMENT '准确的通话时长',
`callType` varchar(16) DEFAULT NULL COMMENT '通话类型-本地通话:1,省内长途:2,国内长途:3,国际长途:4',
`bizType` varchar(16) DEFAULT NULL COMMENT '业务类型-一般为语音电话',
`fee` float DEFAULT '' COMMENT '通话费用',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk; -- 指定字符集为gbk

步骤2:

Python连接MySQL的代码中,要指明使用utf-8或gbk字符集,即写成:

conn = MySQLdb.connect(host="localhost",user="root",passwd="",db="test",charset='utf8')#注意添加charset=utf8或者gbk

就能正确插入中文了。

参考:http://www.iteye.com/topic/406843

解决Python往MySQL插入中文时报错的问题的更多相关文章

  1. node mysql插入中文时报错

    一开始以为是前端传参.数据类型的问题,于是就直接把sql语句中的参数直接改成字符串值,但发现还是报500错误. 所以,这就排除了前端的问题. 剩下的就是数据库了,发现我的表设置有问题.凡是有中文数据的 ...

  2. 解决python代码中含有中文报错

    python中写入中文时报错如下图所示: 依照网上解决方法:在py文件中加入:#encoding=utf-8 然后继续报错如下图所示: 解决方法: 在py文件中加入: import sysreload ...

  3. mysql 插入中文报错: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value...

    总结写在前面, 总结: 当Java通过jdbc链接mysql插入中文时,要保证程序可以正常执行,而且插入的中文不会乱码, mysql服务器端,对数据表(不是数据库)的编码设置,要保证是支持中文的,例如 ...

  4. Mysql新建表,插入中文时报错“Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column”问题

    有时候我们在往数据库中输入信息时,如果输入的内容是中文,会报错“Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column”. 例如: ...

  5. mysql插入中文报错的问题

    报错:1366, "Incorrect string value: '\\xE6\\xB7\\xB1\\xE5\\x85\\xA5...' for column ' 由于公司原因之前一直在使 ...

  6. Mysql 插入时间时报错Incorrect datetime value: '' for column 'createtime'

    在网上找了很多方法总结如下: 1.MySQL驱动版本的问题.这种一般是在mYSQL版本更新了之后才会报错.解决方法在jdbc里添加“&useOldAliasMetadataBehavior=t ...

  7. MySQL插入中文数据报错

    在操作数据库插入中文会出现如下错误: ERROR 1366 (HY000): Incorrect string value: '\xC4\xE3\xBA\xC3' for column 'userna ...

  8. MySQL插入数据时报错Cause: java.sql.SQLException: #HY000的解决方法

    数据库中有字段要求不能为空,但是insert插入的时候,改字段没有值

  9. 解决hibernate向mysql插入中文乱码问题

    一.mysql的问题解决 MySQL会出现中文乱码的原因不外乎下列几点:   1.server本身设定问题,例如还停留在latin1   2.table的语系设定问题(包含character与coll ...

随机推荐

  1. JavaBean出现的目的

    一.JavaBean出现的目的 由于只用JSP开发会发现使用了很多的Scriptlet,会使得jsp文件非常混乱.如果使用了JavaBean,则可以大大减少JSP中代码量. JSP的理想状态是只负责显 ...

  2. Entity Framework - Using Transactions or SaveChanges(false) and AcceptAllChanges()?

    LINK With the Entity Framework most of the time SaveChanges() is sufficient. This creates a transact ...

  3. HBase命令(一) -- 库操作

    打开数据库 bin/start-hbase.sh //打开HBase bin/hbase shell //以命令行的方式打开Hbase控制台 Rest接口开启 bin/hbase rest //普通的 ...

  4. aop实现日志(转)

    文章来至于http://www.thinksaas.cn/group/topic/341436/ 第一:>>在spring的配置文件里增加以下配置 <!-- 支持 @AspectJ ...

  5. jQuery parent.append和$after的区别

    首先假设我们有个id为test的div和一个id为test2的div: <div id="test">     我是测试div </div> <div ...

  6. div+css使多行文字垂直居中?

    1.单行文字: 设置height = line-height; 多行文字: 设置 padding, 自己要计算一下? vertical-align: 可以设置垂直居中, 但是只是针对本身就具有 ali ...

  7. 安装好Android Studio(如果内存足够可以改下as的内存)

    找到studio的bin目录,找到如下文件

  8. jQuery.validator 验证规则详解

    前言:jQuery.validator是一款非常不错的表单验证插件,验证方式非常简单方便,它还对HTML5做了兼容处理,了解了验证规则,就基本掌握了它的使用,下面就让我一一道来 jQuery.vali ...

  9. C#集合类图继承关系一览表

  10. AlwaysOn可用组基础知识

    AlwaysOn可用组概念 AlwaysOn作为SQL Server2012新功能,其目的主要为了替代镜像功能. AlwaysOn拥有镜像的同步和异地容灾功能,并能在镜像的基础上实现一对多的镜像副本同 ...