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线程池的实现实例
Nov 18 Python
python网络编程学习笔记(六):Web客户端访问
Jun 09 Python
python链接oracle数据库以及数据库的增删改查实例
Jan 30 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
Jun 01 Python
Python 使用 prettytable 库打印表格美化输出功能
Dec 26 Python
python3正则模块re的使用方法详解
Feb 11 Python
python计算导数并绘图的实例
Feb 29 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
Python使用文件操作实现一个XX信息管理系统的示例
Jul 02 Python
用 Django 开发一个 Python Web API的方法步骤
Dec 03 Python
python自动计算图像数据集的RGB均值
Jun 18 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
我的群发邮件程序
2006/10/09 PHP
PHP 日志缩略名的创建函数代码
2010/05/26 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
JavaScript入门教程 Cookies
2009/01/31 Javascript
在IE下获取object(ActiveX)的Param的代码
2009/09/15 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
js 获取本地文件及目录的方法(推荐)
2016/11/10 Javascript
Angular2学习笔记——详解路由器模型(Router)
2016/12/02 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
python3 enum模块的应用实例详解
2019/08/12 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
python中的测试框架
2020/11/13 Python
开业典礼主持词
2014/03/21 职场文书
联欢晚会主持词
2014/03/25 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
幼师辞职信范文
2015/02/27 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL
Python matplotlib多个子图绘制整合
2022/04/13 Python