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的id()函数解密过程
Dec 25 Python
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
Feb 04 Python
列举Python中吸引人的一些特性
Apr 09 Python
使用Python的Scrapy框架编写web爬虫的简单示例
Apr 17 Python
Python 爬虫的工具列表大全
Jan 31 Python
Python进度条实时显示处理进度的示例代码
Jan 30 Python
Python实现获取邮箱内容并解析的方法示例
Jun 16 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
Oct 04 Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 Python
Pandas中DataFrame基本函数整理(小结)
Jul 20 Python
python 合并多个excel中同名的sheet
Jan 22 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数组相关函数汇总
2015/03/24 PHP
PHP错误处理函数
2016/04/03 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
2017/06/06 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
javascript表单验证和Window详解
2014/12/11 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
微信小程序可滑动月日历组件使用详解
2019/10/21 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
Python的Flask框架中web表单的教程
2015/04/20 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
Python中itertools的用法详解
2020/02/07 Python
Python魔术方法专题
2020/06/19 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
.NET概念性的面试题
2012/02/29 面试题
综合测评自我鉴定
2013/10/08 职场文书
自荐信怎么写呢?
2013/12/09 职场文书
亲属关系公证书
2014/04/08 职场文书
给学校的建议书范文
2014/05/15 职场文书
个人欠款担保书
2014/05/20 职场文书
相亲大会策划方案
2014/06/05 职场文书
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
预备党员转正材料
2014/12/19 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python
JavaScript前端面试组合函数
2022/06/21 Javascript