【Mysql】How to store UTF8 characters in MySQL
Part1原文
How to store UTF8 characters in MySQL - Ubiq BI
Part2引言
關于 《如何在MySQL中存儲UTF8字符》 的一篇英文博客閱讀和個人實戰(zhàn)筆記。注意個人實驗過程中使用了docker的Mysql 5.7 版本,讀者可以根據(jù)自身情況調整。
Part31. Shell 檢查字符集
如果不習慣Linux的小黑框,最簡單的方式是用navicat的命令行工具查詢,注意用戶需要具備對應的系統(tǒng)配置權限,建議用root操作:
首先我們右擊navicat的數(shù)據(jù)庫連接配置(已準備好),選擇“命令列界面”:

之后是navicat仿照的Shell,等待用戶輸入:

運行下面的命令可以查看所有字符集配置:
SHOW VARIABLES LIKE 'character_set%';
個人的實驗結果如下:
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name ? ? ? ? ? ?| Value ? ? ? ? ? ? ? ? ? ? ?|
+--------------------------+----------------------------+
| character_set_client ? ? | utf8mb4 ? ? ? ? ? ? ? ? ? ?|
| character_set_connection | utf8mb4 ? ? ? ? ? ? ? ? ? ?|
| character_set_database ? | utf8 ? ? ? ? ? ? ? ? ? ? ? |
| character_set_filesystem | binary ? ? ? ? ? ? ? ? ? ? |
| character_set_results ? ?| utf8mb4 ? ? ? ? ? ? ? ? ? ?|
| character_set_server ? ? | latin1 ? ? ? ? ? ? ? ? ? ? |
| character_set_system ? ? | utf8 ? ? ? ? ? ? ? ? ? ? ? |
| character_sets_dir ? ? ? | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.03 sec)
可以看到字符集并不統(tǒng)一。
Part42. 修改字符集為UTF-8
個人使用為docker的mysql自定義映射的配置文件位置,和原始的安裝方式配置文件配置略有不同。不過基本的操作方式都是修改my.cnf
的配置:
[client]?
default-character-set=utf8mb4?
[mysqld]?
character-set-server?=?utf8mb4
個人操作記錄如下,定位到映射文件位置之后,直接vim
修改配置文件:
[root@localhost?conf]#?vim?/opt/mysql/conf/mysql.cnf?
在配置文件當中做如下改動:
[root@localhost?conf]#?cat?/opt/mysql/conf/mysql.cnf?
#?mysqld?custom
[mysqld]
#?下面部分可以忽略
sort_buffer_size?=?16M
read_rnd_buffer_size?=?2M
max_connections?=?10024
#?set?character?to?utf-8
character-set-server?=?utf8mb4
[client]
#?注意客戶端連接也要一并設置
default-character-set=utf8mb4
修改之后重啟docker的mysql鏡像。
[root@localhost?conf]#?docker?ps?
CONTAINER?ID???IMAGE???????COMMAND??????????????????CREATED???????STATUS???????PORTS????????????????????????????????????????????????????NAMES
58fa52f21404???mysql:5.7???"docker-entrypoint.s…"???3?hours?ago???Up?2?hours???33060/tcp,?0.0.0.0:13306->3306/tcp,?:::13306->3306/tcp???mysql57
重啟之后萬事大吉。
[root@localhost?conf]#?docker?restart?58f
之后依舊是連接mysql數(shù)據(jù)庫,繼續(xù)使用show variables like 'character%';
命令查看當前字符集。
修改之前:
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name ? ? ? ? ? ?| Value ? ? ? ? ? ? ? ? ? ? ?|
+--------------------------+----------------------------+
| character_set_client ? ? | utf8mb4 ? ? ? ? ? ? ? ? ? ?|
| character_set_connection | utf8mb4 ? ? ? ? ? ? ? ? ? ?|
| character_set_database ? | utf8 ? ? ? ? ? ? ? ? ? ? ? |
| character_set_filesystem | binary ? ? ? ? ? ? ? ? ? ? |
| character_set_results ? ?| utf8mb4 ? ? ? ? ? ? ? ? ? ?|
| character_set_server ? ? | latin1 ? ? ? ? ? ? ? ? ? ? |
| character_set_system ? ? | utf8 ? ? ? ? ? ? ? ? ? ? ? |
| character_sets_dir ? ? ? | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
修改之后結果如下:
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name ? ? ? ? ? ?| Value ? ? ? ? ? ? ? ? ? ? ?|
+--------------------------+----------------------------+
| character_set_client ? ? | utf8mb4 ? ? ? ? ? ? ? ? ? ?|
| character_set_connection | utf8mb4 ? ? ? ? ? ? ? ? ? ?|
| character_set_database ? | utf8mb4 ? ? ? ? ? ? ? ? ? ?|
| character_set_filesystem | binary ? ? ? ? ? ? ? ? ? ? |
| character_set_results ? ?| utf8mb4 ? ? ? ? ? ? ? ? ? ?|
| character_set_server ? ? | utf8mb4 ? ? ? ? ? ? ? ? ? ?|
| character_set_system ? ? | utf8 ? ? ? ? ? ? ? ? ? ? ? |
| character_sets_dir ? ? ? | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
Part53. 數(shù)據(jù)表轉換為UTF-8
運行下面的命令,將你的數(shù)據(jù)庫的字符集和排序改為UTF8。用你的數(shù)據(jù)庫名稱替換下面的dbname。
ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;`
dbname 修改為自己的數(shù)據(jù)庫即可
上述命令將把你的數(shù)據(jù)庫中的所有表轉換為UTF8MB4 格式。