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 相关文章推荐
简单的通用表达式求10乘阶示例
Mar 03 Python
遗传算法python版
Mar 19 Python
python实现NB-IoT模块远程控制
Jun 20 Python
详解Python 调用C# dll库最简方法
Jun 20 Python
python查看数据类型的方法
Oct 12 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
Python使用Pandas读写Excel实例解析
Nov 19 Python
TensorFlow 显存使用机制详解
Feb 03 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 Python
Python之Matplotlib文字与注释的使用方法
Jun 18 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
Django分页器的用法你都了解吗
May 26 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中防止伪造跨站请求的小招式
2011/09/02 PHP
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
jQuery Flash/MP3/Video多媒体插件
2010/01/18 Javascript
Js获取事件对象代码
2010/08/05 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
2019/03/07 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
python远程连接服务器MySQL数据库
2018/07/02 Python
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
django的ORM模型的实现原理
2019/03/04 Python
python and or用法详解
2019/06/26 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
Win10 安装PyCharm2019.1.1(图文教程)
2019/09/29 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
wxPython实现分隔窗口
2019/11/19 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
销售人员中英文自荐信
2013/09/22 职场文书
机修工岗位职责
2013/11/24 职场文书
公证委托书大全
2014/04/04 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
后勤工作个人总结
2015/02/28 职场文书