今天遇到一个问题,用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. ie6下absolute:fixed问题,完美兼容

    普通css代码 .fix_foot{height: 30px; background: #ff0000; position: %; z-index:;} ie6兼容代码 * html,* html b ...

  2. osharp3使用经验:整合DbContextScope 文章 1

    osharp3的事务处理是跳过savechangeing方法来控制的,没有DbContextScope专业 DbContextScope管理dbcontext的优劣本文不讨论 整合过程: 1.在.Da ...

  3. centos 7.0 编译 安装mysql 5.6.22 过程 已完成~ 成功~ 撒花~

    mysql 下载目录/usr/local/srcmysql 解压目录 /usr/local/bin/mysql GitHub https://github.com/mysql/mysql-server ...

  4. safari 调用隐藏fileInput

    在safari上,用自定义按钮调用隐藏fileInput,注意点 1. event listener中,不要 return false2. 不要使用display:none,可使用 opacity:0 ...

  5. XML模块

    XML 例子: # -*- encoding:utf-8 -*- import requests from xml.etree import ElementTree as ET f = request ...

  6. Java多线程编程核心技术---拾遗增补

    线程状态验证 public class MyThread extends Thread { public MyThread() { System.out.println("构造方法中的状态: ...

  7. Mysql表分区几种方式

    自5.1开始对分区(Partition)有支持,一张表最多1024个分区 查询分区数据: SELECT * from table PARTITION(p0) = 水平分区(根据列属性按行分)= 举个简 ...

  8. 再说vundle: 完全vim字符编程的四个必须插件 - zen coding 和emmet插件的使用

    一个常识: 基本上vim插件的配置文集都是放在对应插件目录 的/autoload/ plugin_name.vim 文件中的 有四个必要/必须的插件,实现vim完全的字符界面的编程: NERDTree ...

  9. shell学习之路:流程控制(for)

    for循环的语法: 1.  for 变量 in 值1 值2 值3.... do 程序 done 例如:下列脚本会分别打印4次 分别是morning noon afternoon evening的值 # ...

  10. ESI 动态缓存技术

    任何一个Web网站的内容都是在不断更新和变化,但这并不意味这这个网站的内容就是动态内容,事实上,动态的内容是指用户每次点击 相同的链接时取的的内容是由Web服务器应用程序生成的,如常见得ASP,JSP ...