解决Flask-SQLAlchemy中文乱码问题
一、问题
这两天在学习使用flask + SQLAlchemy 定制一个web查询页面的demo ,在测试时,发现查询到的结果显示乱码 。这里将解决方法记录下。
二、解决思路
1、flask 程序上定位
flask的文档中提到可以通过设置SQLALCHEMY_NATIVE_UNICODE来禁止使用SQLAlchemy默认的Unicode编码。有可能是SQLAlchemy默认的Unicode编码不是UTF-8,抱着这样的想法,在程序中指定了“SQLALCHEMY_NATIVE_UNICODE=False”,执行程序,报错。
flask中还提到“use_native_unicode”为目标编码来指定编码方式,尝试将“db = SQLAlchemy(app)”改为“db = SQLAlchemy(app, use_native_unicode=”utf8″)”。这回虽然没报错,但还是乱码。
2、mysql 上定位
突然想到有可能是建表的时候,没有指定字符集,使用的是数据库默认的字符集的导致的。继续找了一段时间的如何指定建表时使用字符集的方法,未果。
数据库该不会使用的不是UTF-8吧?抱着这个想法,进入数据库,输入“status”,在输出的信息上显示默认是latin-1。搞了半天,原来问题在这。
1mysql> status
2--------------
3mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
4Connection id: 9
5Current database: web12306
6Current user: root@localhost
7SSL: Not in use
8Current pager: stdout
9Using outfile: ''
10Using delimiter: ;
11Server version: 5.1.73 Source distribution
12Protocol version: 10
13Connection: Localhost via UNIX socket
14Server characterset: utf8
15Db characterset: utf8
16Client characterset: latin1
17Conn. characterset: latin1
18UNIX socket: /var/lib/mysql/mysql.sock
3、解决问题
即然找到了,问题就在mysql 的my.cnf 上增加相关配置,并重启mysql 服务:
1# 进入mysql的配置文件目录
2cd /etc/mysql/
3# 编辑my.cnf配置文件
4vim my.cnf
5# 在文件中的[mysqld]下面增加一行内容
6character_set_server = utf8
7# 在[client]和[mysql]下面分别增加一行内容
8default-character-set = utf8
9# 保存。然后重启MySQL的服务,设置就生效了
10service mysqld restart
注:需要注意的是,之前已经存在的数据,在上面修改过后,通过mysql select查询时会是乱码,需要重新导入。
最后上个图:
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/flask-sqlalchemy/4463.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.