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