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。搞了半天,原来问题在这。

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
Connection id:          9
Current database:      web12306
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.1.73 Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    latin1
Conn.  characterset:    latin1
UNIX socket:            /var/lib/mysql/mysql.sock

3、解决问题

即然找到了,问题就在mysql 的my.cnf 上增加相关配置,并重启mysql 服务:

# 进入mysql的配置文件目录

cd /etc/mysql/
# 编辑my.cnf配置文件
vim my.cnf
# 在文件中的[mysqld]下面增加一行内容
character_set_server = utf8
# 在[client]和[mysql]下面分别增加一行内容
default-character-set = utf8
# 保存。然后重启MySQL的服务,设置就生效了
service mysqld restart

注:需要注意的是,之前已经存在的数据,在上面修改过后,通过mysql select查询时会是乱码,需要重新导入。

最后上个图:

时间: 2024-11-05 16:25:33

Flask-SQLAlchemy中文乱码问题解决办法的相关文章

smarty截取中文乱码问题解决办法

smarty截取中文乱码问题解决办法 本文章提供了三款smarty截取中文乱码问题解决办法,关于乱码主要是在中文汉字中的处理了,我们利用了uft-8,gb2312等字符内码机制来截取字符串. */ function smarty_modifier_utruncate($string, $length = 80, $etc = '...',                                     $break_words = false, $middle = false)   { 

Docker容器 日志中文乱码问题解决办法_docker

Docker容器 日志中文乱码问题解决办法 1. 找到dockerfile文件, 如 /use/local/src/Docker/Dockerfile 2. 编辑Dockerfile 添加 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 3. 生成新的镜像文件 docker build -t centos7 . 4. 使用docker images查看新生成的镜像 5. 使用新的镜像启动容器 docker run

常见php与mysql中文乱码问题解决办法_Mysql

乱码问题1:用PHPmyAdmin操作MySQL数据库汉字显示正常,但用PHP网页显示MySQL数据时所有汉字都变成了?号. 症状:用PHPmyAdmin输入汉字正常,但当PHP网页显示MySQL数据时汉字就变成了?号,并且有多少个汉字就有多少个?号. 原因:没有在PHP网页中用代码告诉MySQL该以什么字符集输出汉字. 解决方法: 1.网页文件head设置编码<meta http-equiv="Content-Type" content="text/html; cha

python在eclipse下中文乱码问题解决办法

关于编辑环境编码 首先要确保eclipse编辑器环境的编码为utf8,这个是大前提:其次如果py文件中含有中文字符的话,需要在py文件 中对编码进行声明. 1. 修改eclipse编辑器编码 a) window->preferences->general->editors->text editors->spelling->encoding->UTF-8 b) window->preferences->workspace->text file en

php写入mysql中文乱码问题解决办法

php中关于mysql的操作非常简单,然而最近在做一个小工具的时候发现php写入mysql的数据库中出现了中文字符的乱码,这个乱码的问题纠结了我好久,明明英文字符写入正常,但是中文就是乱码! 一开始我感觉是我建立mysql数据库的时候没有设置UTF-8字符集,然而后来我发现即使我设置了这个字符集还是不能解决问题,写入mysql的字符串照样乱码. 解决这个问题其实很简单. 1.在建表的时候设置编码类型为gb2312_chinese_ci. 2.在PHP页面的数据库连接语句加一行mysql_quer

js中ajax 传递中文乱码问题解决办法

解决的办法是使用js的encodeURI函数,对传递的参数进行编码.  代码如下 复制代码 var keywords=encodeURI(document.getElementById("suggestfilm").value); 例  代码如下 复制代码 <script type="text/javascript">         //var data=<%=data %>     jQuery(document).ready(funct

Perl向MySQL插入中文乱码问题解决办法

当使用DBI向MySQL插入中文时,数据库中中文会显示乱码(即使表的编码为utf8),需要在插入语句前读取语句前添加编码设置 先说MySQL的字符集问题.Windows下可通过修改my.ini内的 # CLIENT SECTION [mysql] default-character-set=utf8 # SERVER SECTION [mysqld] default-character-set=utf8 这 两个字段来更改数据库的默认字符集.第一个是客户端默认的字符集,第二个是服务器端默认的字符

jsp get Url请求方式中文乱码问题解决办法

jsp中post方式请求一般不会乱码,如果乱码加上这句: 解决办法一    代码如下 复制代码 request.setCharacterEncoding("utf-8"); 而get方式请求,若url含非西欧编码必然会乱码,处理方式:  代码如下 复制代码 request.setCharacterEncoding("utf-8"); //将请求参数使用ISO-8859-1分解成字节数组,再将字节数组解码成字符串  代码如下 复制代码 String name = ne

PHP URL传递中文乱码问题解决办法

在使用 ?id="中文" 传递中文参数时,出现了乱码,这是经过了二次转码后的结果,其中,在 php 中,url 中是不可以直接传输中文的,对于这点,一直心存不满,没办法呀,谁让咱没一套解决方案呢,不知道别的语言是不是也出现这样的问题. 对于网上所说的在首页添加 header("content-type:text/html;charset=utf-8″); 这样的代码,以及把数据库页面等等设置成 utf8 的解决方案根本无效,始终传递过来的中文是乱码. 尽管所有 04ie.co