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类参数self使用示例
Feb 17 Python
Python获取Windows或Linux主机名称通用函数分享
Nov 22 Python
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
django反向解析URL和URL命名空间的方法
Jun 05 Python
python cs架构实现简单文件传输
Mar 20 Python
python3下载抖音视频的完整代码
Jun 05 Python
Django文件存储 默认存储系统解析
Aug 02 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 Python
Python爬虫实现vip电影下载的示例代码
Apr 20 Python
Python文件夹批处理操作代码实例
Jul 21 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 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
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
自己的js工具 Cookie 封装
2009/08/21 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
浅谈Angularjs中不同类型的双向数据绑定
2018/07/16 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
小程序实现密码输入框
2020/11/16 Javascript
[01:07:22]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG加赛
2014/05/26 DOTA
Python实现在线音乐播放器
2017/03/03 Python
实例讲解python中的序列化知识点
2018/10/08 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
python Canny边缘检测算法的实现
2020/04/24 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
材料物理专业大学毕业生求职信
2013/10/15 职场文书
优质的学校老师推荐信
2013/10/28 职场文书
个人作风建设心得体会
2014/10/22 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL