pymysql 连接 mysql 出现乱码问题的解决方法

  这次做的玩具要使用 pymysql 连接 mysql,刚开始时读出来的中文全为 ??, 这里简单记下中文乱码的解决方法.
  其实不清楚到底是以下哪步的效果,所以还是都记上吧 -_-
  主要使用以下措施防止出现乱码问题

  • mysql 数据库 charset=utf-8
  • python 文件设置编码为 utf-8 (文件头部加上 # -*- coding: utf8 -*-)
  • python 连接 mysql 加上参数 charset='utf8'

mysql 服务器端

  在 /etc/mysql/my.cnf 中添加如下

1
2
3
4
5
6
7
8
[client]
default-character-set=utf8

[mysqld]
character_set_server=utf8

[mysql]
default-character-set=utf8

  使用 use <database> 切换到数据库后,可使用如下指令查看字符编码

1
show name like '%char%';

  可使用如下指令设置默认编码格式

1
set names utf8;

  建表 sql 语句如下

1
2
3
4
5
6
7
8
CREATE TABLE client_record
(
ID integer(4) primary key not null auto_increment,
user_name varchar(50) not null,
balance numeric(10, 2) DEFAULT 0
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8;

pymysql 端

  在创建 pymysql.connection 对象时指定 charset 参数

1
connect = pymysql.connect(host=host, user=user, password=password, database=database, charset='utf8')