Python程序中使用SQLAlchemy时出现乱码的解决方案


Posted in Python onApril 24, 2015

今天对clubot进行了升级, 但是导入数据后中文乱码, 一开是找资料说是在创建引擎的时候添加编码信息:

engine = create_engine("mysql://root:@localhost:3306/clubot?charset=utf8")

但是这并不行, 然后查看表信息:

> show create table clubot_members;
clubot_members | CREATE TABLE `clubot_members` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `email` varchar(100) DEFAULT NULL,
 `nick` varchar(50) DEFAULT NULL,
 `last_say` timestamp NULL DEFAULT NULL,
 `last_change` timestamp NULL DEFAULT NULL,
 `isonline` int(11) DEFAULT NULL,
 `join_date` timestamp NULL DEFAULT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `email` (`email`),
 UNIQUE KEY `nick` (`nick`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1;

发现原来创建表的时候用的latin1编码, 而老的表是用utf-8编码创建的, SQLAlchemy中并没有发现有创建表时指定指定编码的方法. 所以只能在MySQL本身来找:

> show VARIABLES like "character%%";
+--------------------------+-----------------------------+
| Variable_name      | Value            |
+--------------------------+-----------------------------+
| character_set_client   | utf8            |
| character_set_connection | utf8            |
| character_set_database  | latin1           |
| character_set_filesystem | binary           |
| character_set_results  | utf8            |
| character_set_server   | latin1           |
| character_set_system   | utf8            |
| character_sets_dir    | /data/share/mysql/charsets/ |
+--------------------------+-----------------------------+
8 rows in set (0.00 sec)

> show create database clubot;
+----------+-------------------------------------------------------------------+
| Database | Create Database                          |
+----------+-------------------------------------------------------------------+
| clubot  | CREATE DATABASE `clubot` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)

发现 MySQL默认的和数据库都是latin1的编码, 所以更改数据库配置

vi /etc/mysql/my.cnf      # MySQL配置文件在Ubuntu上的位置, 其他系统可能有差异

分别在[client] [mysqld]下添加

default-character-set = utf8

这时重启MySQL居然起不来, 说default-character-set是无效的变量, 查看MySQL版本发现是5.5, 找资料说5.5的服务端编码设置变量是character-set-server, 所以将[mysqld]上的default-character-set = utf8改为 character-set-server = utf8, 并重启MySQL

然后更改数据库编码:

alter database clubot character set utf8;

删除新建的表, 并重新导入数据中文就正常了

> use clubot;

> drop table clubot_status;

> drop table clubot_infos;

> drop table clubot_history;

> drop table clubot_members;
Python 相关文章推荐
Python实现删除文件但保留指定文件
Jun 21 Python
在Python的Django框架中加载模版的方法
Jul 16 Python
python中的lambda表达式用法详解
Jun 22 Python
python验证码识别的示例代码
Sep 21 Python
Python输出带颜色的字符串实例
Oct 10 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
Feb 11 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
Python中全局变量和局部变量的理解与区别
Feb 07 Python
python - asyncio异步编程
Apr 06 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 Python
django如何自定义manage.py管理命令
Apr 27 Python
简单说明Python中的装饰器的用法
Apr 24 #Python
使用基于Python的Tornado框架的HTTP客户端的教程
Apr 24 #Python
简单介绍Python的Tornado框架中的协程异步实现原理
Apr 23 #Python
解决Python中由于logging模块误用导致的内存泄露
Apr 23 #Python
粗略分析Python中的内存泄漏
Apr 23 #Python
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 #Python
用Python编写脚本使IE实现代理上网的教程
Apr 23 #Python
You might like
PHP 模板高级篇总结
2006/12/21 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
纯php生成随机密码
2015/10/30 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
javascript入门·动态的时钟,显示完整的一些方法,新年倒计时
2007/10/01 Javascript
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
python实现的防DDoS脚本
2011/02/08 Python
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
python3.4用函数操作mysql5.7数据库
2017/06/23 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
2018/06/04 Python
Python实现注册、登录小程序功能
2018/09/21 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
django settings.py 配置文件及介绍
2019/07/15 Python
python3实现单目标粒子群算法
2019/11/14 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
留学经费担保书
2014/05/12 职场文书
毕业论文致谢部分怎么写
2015/05/14 职场文书
超市主管竞聘书
2015/09/15 职场文书
市场营销计划书
2019/04/24 职场文书
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python