最近我在做一个讨论组的应用,数据库是阿里云上自己安装的Mysql。今天突然发现有中文插入报错的情况,难道是数据库编码问题?

带着疑惑,登上服务器,进入mysql终端检查当前的编码,果不其然:


OK, 问题已经找到,那么开始解决。

1、 查找本机mysql配置文件

由于服务器是linux系统,所以可以使用 whereis 命令来帮助寻找。

whereis mysql
mysql: /usr/bin/mysql /etc/mysql /usr/lib/mysql /usr/bin/X11/mysql /usr/include/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz

最后发现我的mysql主配置文件是 /etc/mysql/my.cnf

2、 修改配置文件,添加utf8相关设置

由于my.cnf文件中有这样一行代码 !includedir /etc/mysql/conf.d/, 所以我们可以将自定义配置信息放在conf.d/目录里面。这样的好处是方便配置模块化管理 , 个人比较推荐这样做。

新建/etc/mysql/conf.d/utf8.cnf 文件,并添加如下代码:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

3、 重启Mysql服务

sudo service mysql restart

至此Mysql全局的编码已经设置为了utf8,中文报错的问题已不复存在。

参考资料: http://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf-8-in-my-cnf