今天遇到一个问题,用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. GLSL Interface Block参考

    http://www.opengl.org/wiki/Interface_Block_(GLSL) http://stackoverflow.com/questions/9916103/opengl- ...

  2. -[UIKeyboardLayoutStar release]: message sent to deallocated instance

    网上大家都说是因为替换了系统的objextAtIndex方法,但是为了减少应用崩溃的可能,是要进行Hook的,所以不想取消Hook. 解决办法,关掉键盘进入后台. - (void)applicatio ...

  3. 解决 linux下编译make文件报错“/bin/bash^M: 坏的解释器:没有那个文件或目录” 问题

    PS背景:我在公司做sdk 的pc端开发,所以经常会在win下编译通过之后跑到linux下再运行一次已确保能支持多平台. 今儿在win下跑完一程序,然后放到linux下跑的时候,我用指令: [plai ...

  4. MyEclipse 中各种 libraries 的含义

    MyEclipse 中各种 libraries 的含义       JRE System Library,Java EE 5 Libraries,Referenced  Libraries这三个都是各 ...

  5. C# 正则分组捕获

    分组语法 捕获 (exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) (?:exp ...

  6. 【转】跟我学Kafka之NIO通信机制

    from:云栖社区 玛德,今天又被人打脸了,小看人,艹,确实,相对比起来,在某些方面差一点,,,,该好好捋捋了,强化下短板,规划下日程,,,引以为耻,铭记于心. 跟我学Kafka之NIO通信机制   ...

  7. 如何运行python

    如何运行Python程序 不少新手朋友遇到的第一个问题,不是Python的数据结构,不是Python的类库使用,更不是第三方模块.框架的应用,而是简单的“如何运行”!Python可用以下三种方式运行, ...

  8. Jquery实现滚动显示欢迎字幕效果

    Jquery控制滚动显示欢迎字幕: 参考代码: <!DOCTYPE html> <html> <head> <title>Colin Marquee W ...

  9. Ruby中Block, Proc, 和Lambda

    Block Blocks就是存放一些可以被执行的代码的块,通常用do...end 或者 {}表示 例如: [1, 2, 3].each do |num| puts num end [1, 2, 3]. ...

  10. Codeforces Round #270 1002

    Codeforces Round #270 1002 B. Design Tutorial: Learn from Life time limit per test 1 second memory l ...