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 a VARCHAR column.)

这就是说 你创建的 database,table, column 也要改成 utf8mb4; 我是直接删了所有以前的东西,然后从零开始创建,所以省略了这一步。结果失败了。

/########################## 第三部分 ########################

还要在code里面改一下数据库的链接代码(注意:charset=utf8mb4):

mysql://root:@127.0.0.1:3306/weibo?charset=utf8mb4



kid_learning
16 声望0 粉丝