https://www.linuxidc.com/Linu...mysql
为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、
MySQL 数据库建议都提早采用 utf8mb4 字符集.linux
总结一下:sql
要完成修改,须要三个步骤来解决:数据库
(1):修改mysql数据库的编码为uft8mb4 (第一部分) (2):修改数据表的编码为utf8mb4 (第二部分) (3):修改链接数据库的链接代码 (第三部分)
与linux系统不一样,在 MacOS中 将 default-character-set
设置为 utf8mb4
仍是有点tricky的。macos
/########################## 第一部分 ########################this
网上搜到的答案通常都说修改 my.cnf 就能够了。 可是! 在 MacOS 里,你找不到mysql的 my.cnf 文件, 由于 macos里面 mysql 一开始就没有这么一个 my.cnf 文件。
那么咱们怎么作呢? 编码
在terminal里,输入:rest
mysql --help
或 mysql --help | grep cnf
能够看到这样的描述:code
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
文件, 输入:server
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