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删除文件示例分享
Jan 28 Python
基于python的字节编译详解
Sep 20 Python
git进行版本控制心得详谈
Dec 10 Python
Python简单实现控制电脑的方法
Jan 22 Python
使用python判断你是青少年还是老年人
Nov 29 Python
详解Python:面向对象编程
Apr 10 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
Python中的全局变量如何理解
Jun 04 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
Jun 29 Python
Django集成MongoDB实现过程解析
Dec 01 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
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
PHP模板引擎Smarty的缓存使用总结
2014/04/24 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
Js中sort()方法的用法
2006/11/04 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
2017/02/11 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
Vue.js的动态组件模板的实现
2018/11/26 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
python实现端口转发器的方法
2015/03/13 Python
Django中使用group_by的方法
2015/05/26 Python
python中MethodType方法介绍与使用示例
2017/08/03 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
Python time库基本使用方法分析
2019/12/13 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
2020/11/15 Python
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
用C#语言写出在本地创建一个UDP接收端口的具体过程
2016/02/22 面试题
施工班组长岗位职责
2014/01/05 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
装修安全责任协议书
2016/03/22 职场文书
python基于tkinter实现gif录屏功能
2021/05/19 Python
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers