https://www.linuxidc.com/Linu…
为了应对无线互联网的机遇和挑战、避免 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 aVARCHAR
column.)
这就是说 你创建的 database,table, column 也要改成 utf8mb4; 我是直接删了所有以前的东西,然后从零开始创建,所以省略了这一步。结果失败了。
/########################## 第三部分 ########################
还要在code里面改一下数据库的链接代码(注意:charset=utf8mb4):
mysql://root:@127.0.0.1:3306/weibo?charset=utf8mb4