概要:
今天学习python 的时候,到了数据库连接部分,然后看见我的老大哥上面注明了一个编码设置,charset = utf-8,我记得之前在单独使用mysql的时候,我也遇到了这个问题,所以我重现了我遇到的问题。
实验环境
- mysql workbench 如果你使用命令行之后也会遇到同样的问题
- mysql 5.7.21 官方的最新版本
- ubuntu 系统
探索过程:
首先先讲一下基础:
我们查看一下mysql的编码默认设置是什么:
# 查看里面包含有char的变量
show variables like '%char%'
我们可以很清楚的看见如上的图里面显示的内容,我截图到了一个网上的表来解读一下这里面的内容:如下,很好的总结了编码的内容,值得好好去理解一下
http://www.cnblogs.com/cchust/p/4327019.html
一开始建数据库的时候
-- 创建一个叫test111的数据库
create schema test111;
-- 使用test111
use test111;
-- 往库里建立表格table
create table table_测试编码
(
ID int,
name varchar(50),
primary key(ID)
);
-- 往里面插入编码
insert into table_测试编码 values('123','张三')
这个时候就会有一个报错了!1366报错,意思就是中文不能编码,为啥呢?因为建数据库的时候,就是一开始的那个截图显示character_set_database = latin1,这种编码意思是建立数据库的编码 不能用中文的
解决方案
1.我觉得不够完全,我一开始在workbench 不用命令行建库的时候,上面有一个选项,选到utf-8 能解决问题,但是我这么一想,如果我以后去服务器上搞这个,没有GUI给我,我咋办。
2.网上所说的,在配置文件里面改,最新版本的5.7.21就没有这个my.cnf 这个文件存在,自建只有,重启也并不能解决问题。本来我准备删掉 换旧版本了,但是想想不能逃避问题,经过摸索找出来修改配置的方法,如下:
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
这个是可行的!是有这个文件的,然后
在 [mysqld] 域下加上:
character-set-server=utf8
再重新启动服务器
$ sudo systemctl restart mysql
最后附上成功的图: