Catalogue
在阿里云上部署完运行环境之后(部署参见NodeJS+Express+MySQL开发小记(2):服务器部署),运行了几天,发现有张表的字符集默认成了 Latin1
,导致中文只显示问号。
先趁此机会尝试安装MySQL5.6,省得以后再升级,但是折腾了一上午,未遂。权衡了一下,还是去修改当前的MySQL5.5的默认字符集得了。
修改之前
查看当前MySQL版本
1 | $ mysql -V |
查看数据库字符集
进入MySQL之后,运行语句:
1 | mysql> show variables like 'char%'; |
这样可以看到MySQL所使用的字符集。
开始更改设置
查看当前MySQL所使用的配置文件的顺序
1 | $ mysql --help | grep Default -A 1 |
修改配置文件
第一次安装MySQL,/etc/my.cnf
文件应该是不存在的。所以打开/etc/mysql/my.cnf
:
1 | vi /etc/mysql/my.cnf |
在以下3个部分都做相应改动:
(1)在[client]字段里加入default-character-set=utf8,如下:
1 | [client] |
(2)在[mysqld]字段里加入character-set-server=utf8,如下:
1 | [mysqld] |
也可以这样改:
1 | [mysqld] |
(3)在[mysql]字段里加入default-character-set=utf8,如下:
1 | [mysql] |
重启MySQL
1 | sudo service mysql restart |
查看是否生效
1 | mysql> show variables like 'char%'; |
如果出错了
如果重启失败了,那么可以到/var/log/mysql/error.log
文件中查看输出的启动错误。
修改后,运行sudo service mysql start
来启动服务。
表的字符集
修改了MySQL的默认字符设置,并不能更改已经生效的字符设置。如果某张表的字符仍是乱码,那么说明它的字符集仍然为Latin1。
可以这样查看某张表的建表情况:
1 | SHOW CREATE TABLE table_name; |
所以最佳实践是:
在建表语句中,显式地声明该表所要使用的字符集