为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、
MySQL 数据库建议都提前采用 utf8mb4 字符集.
总结一下:
要完成修改,需要三个步骤来解决:
(1):修改mysql数据库的编码为uft8mb4 (第一部分)
(2):修改数据表的编码为utf8mb4 (第二部分)
(3):修改连接数据库的连接代码 (第三部分)
与linux系统不同,在 MacOS中 将 default-character-set 设置为 utf8mb4 还是有点tricky的。
/########################## 第一部分 ########################
网上搜到的答案一般都说修改 my.cnf 就可以了。 但是! 在 MacOS 里,你找不到mysql的 my.cnf 文件, 因为 macos里面 mysql 一开始就没有这么一个 my.cnf 文件。
那么我们怎么做呢?
在terminal里,输入:
mysql --help 或
mysql --help | grep cnf
可以看到这样的描述:
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
但是在 MacOS 里, 你根本找不到这些 .cnf 文件。那么我们首先要创造它们。
首先找到 my-default.cnf文件, 输入:
sudo find / -name my-default.cnf
(这一行的意思是,在 / 目录里找到 name 为 my-default.cnf的路径)
caoda1@CaoDas-MBP:~/Documents/news_robot$ sudo find / -name my-default.cnf
Password:
/usr/local/Cellar/mysql/5.7.11/support-files/my-default.cnf
然后将找到的文件拷贝到 /etc/:
sudo cp /usr/local/Cellar/mysql/5.7.11/support-files/my-default.cnf /etc/
然后在/etc/my-default.cnf里,修改/添加如下:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
添加或修改完成后,保存退出,然后改文件名:
sudo mv /etc/my-default.cnf /etc/my.cnf
然后找到mysql安装在哪里,接着重启 MySQL:
caoda1@CaoDas-MBP:~/Documents/news_robot$ which mysql
/usr/local/bin/mysql
caoda1@CaoDas-MBP:~/Documents/news_robot$ sudo /usr/local/bin/mysql.server restart
Shutting down MySQL
..... SUCCESS!
Starting MySQL
. SUCCESS!
然后, 重启 MySQL Server、检查字符集
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
mysql> show variables like "character_set_database";
/########################## 第二部分 ########################
我省略了一步:(但是这一步很重要!!!!)
修改 database、table和column字符集
For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
(Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is
just an example for a VARCHAR column.)
这就是说 你创建的 database,table, column 也要改成 utf8mb4; 我是直接删了所有以前的东西,然后从零开始创建,所以省略了这一步。结果失败了。
/########################## 第三部分 ########################
还要在code里面改一下数据库的链接代码(注意:charset=utf8mb4):
mysql://root:@127.0.0.1:3306/weibo?charset=utf8mb4