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实现3行代码解简单的一元一次方程
Aug 18 Python
Django添加feeds功能的示例
Aug 07 Python
django 单表操作实例详解
Jul 30 Python
python实现滑雪游戏
Feb 22 Python
Python基于pyecharts实现关联图绘制
Mar 27 Python
关于Keras Dense层整理
May 21 Python
Tensorflow实现将标签变为one-hot形式
May 22 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 Python
python3中布局背景颜色代码分析
Dec 01 Python
浅析python连接数据库的重要事项
Feb 22 Python
Python内置的数据类型及使用方法
Apr 13 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 Undefined index和Undefined variable的解决方法
2008/03/27 PHP
PHP中文分词的简单实现代码分享
2011/07/17 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
JavaScript原型链示例分享
2014/01/26 Javascript
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
Html5 js实现手风琴效果
2020/04/17 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
对于Python的框架中一些会话程序的管理
2015/04/20 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
初二物理教学反思
2014/01/29 职场文书
项目申报专员岗位职责
2014/07/09 职场文书
老公保证书怎么写
2015/02/26 职场文书
Pandas自定义选项option设置
2021/07/25 Python
python入门学习关于for else的特殊特性讲解
2021/11/20 Python
分享几种python 变量合并方法
2022/03/20 Python
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技