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 13 Python
基于python实现的抓取腾讯视频所有电影的爬虫
Apr 22 Python
Python 模块EasyGui详细介绍
Feb 19 Python
Python实现读取Properties配置文件的方法
Mar 29 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
python用列表生成式写嵌套循环的方法
Nov 08 Python
用python代码将tiff图片存储到jpg的方法
Dec 04 Python
pycharm 安装JPype的教程
Aug 08 Python
python 采用paramiko 远程执行命令及报错解决
Oct 21 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
教你怎么用Python实现多路径迷宫
Apr 29 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
header()函数使用说明
2006/11/23 PHP
php session 预定义数组
2009/03/16 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
PHP attributes()函数讲解
2019/02/03 PHP
详解php命令注入攻击
2019/04/06 PHP
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
vc6编写python扩展的方法分享
2014/01/17 Python
Python的Flask开发框架简单上手笔记
2015/11/16 Python
Python中%r和%s的详解及区别
2017/03/16 Python
Python的argparse库使用详解
2018/10/09 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
DataList 能否分页,请问如何实现?
2015/05/03 面试题
新学期决心书
2014/03/11 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
任命书怎么写
2015/03/02 职场文书
工作能力自我评价2015
2015/03/05 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
如何写好竞聘报告
2019/04/03 职场文书
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
python井字棋游戏实现人机对战
2022/04/28 Python
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android