Mysql utf8mb3 utf8mb4 与UTF8 字符集参数(character_set_system)的说明
Mysql UTF8之utf8mb3 utf8mb4
字符集概述
字符集即是為了兼容各國的文字而做的編碼,比如GB2312、GBK等,通用的編碼我們用utf8。
mysql(5.7及8.0)里utf8實際是用3個字節存儲即對應utf8mb3,而真正意義上的utf8對應的是4個字節存儲即對應utf8mb4。
utf8mb3和utf8mb4的比較:
| 比較內容 | utf8mb3 | utf8mb4 |
| 存儲最大字節數 | 3 | 4 |
| 支持類型 | 基本多文種平面 + US-ASCII | 輔助平面(Supplementary) 、基本多文種平面 + US-ASCII |
| unicode范圍 | U+0000 至 U+FFFF | U+0000至U+10FFFFF |
| 支持字符 | 英文字母,中日韓(CJK)大部分常用字等 | 英文字母,中日韓(CJK)非常用字,數學符號,emoji表情等 |
字符集相關參數
| 變量名 | 含義 |
| character_set_client | 設置客戶端使用的字符集。 |
| character_set_connection | 設置連接數據庫時的字符集,當程序里沒指定連接數據庫的字符集時的選項。 |
| character_set_database | 設置創建數據庫時默認字符集,即創建數據庫時不指定字符集時的選項。 |
| character_set_filesystem | 文件系統的編碼格式,把操作系統上的文件名轉化成此字符集,即把 character_set_client轉換character_set_filesystem, 默認binary是不做任何轉換的。 |
| character_set_results | 數據庫給客戶端返回時使用的字符集,如果沒指定則用character_set_server。 |
| character_set_server | 服務器的默認字符集。 |
| character_set_system | 數據庫系統存儲系統元數據的字符集,該值為utf8。 |
| character_sets_dir | 字符集安裝的目錄。 |
配置示例
-- 情景一:將當前服務器的默認服務器、默認數據庫字符集參數改成utf8mb4。
-- #1 情況一,如果是windows則找到my.ini修改如下內容后重啟數據庫服務器。
?[mysqld]下追加如下內容:
character-set-client-handshake = FALSE
character-set-server=utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
注:
character-set-client-handshake和init_connect即指定了客戶端連接時的字符集。如果想客戶端連接時指定字符集,則這兩個參數可不指定。
-- #1 情況二,如果是linux,可先通過命令查看mysql加載配置文件的順序。
mysqld --help --verbose 2>/dev/null|grep -A1 "Default option"
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
即先是/etc/my.cnf 再是/etc/mysql/my.cnf 而后是~/.my.cnf。
當前演示環境里沒有/etc/my.cnf,只有/etc/mysql/my.cnf
只有/etc/mysql/my.cnf,而其對應的服務端配置在/etc/mysql/mysql.conf.d內,
客戶端配置在/etc/mysql/conf.d/內。
所以如上#1里配置內容需要在/etc/mysql/mysql.conf.d內。
-- #2 創建新的數據庫,可見當前數據庫的默認字符集已經變為utf8mb4。
CREATE DATABASE shenl_2;
USE shenl_2;
show variables LIKE '%chara%'
/*
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????? utf8mb3
character_sets_dir???? /usr/share/mysql-8.0/charsets/
*/
-- 情景二: 通過SQL命令修改數據庫、表的字符集
ALTER DATABASE shenl_2 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE tb_user ?CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 情景三: 修改客戶端、連接、結果集的字符集時在客戶端參數(客戶端文件在目錄/etc/mysql/conf.d/內)里如下定義即可:
[mysql]
default-character-set=utf8mb4
-- 情景四:客戶端指定字符集連入數據庫。
mysql -uroot -h localhost -proot1234 --default-character-set=latin1
show variables LIKE '%chara%';
注:1 該方式在服務端不指定該方式在服務端不指定character-set-server時有效。
2 同理可以在客戶端配置里指定default-character-set參數。
?
注:
1 參數default-character-set=utf8mb4是客戶端里的參數。
2 參數character_set_system是只讀(不可修改)參數。
?3 mysql源碼預編譯時指定的字符集參數 -DEFAULT_CHARSET=utf8mb4對應character-set-server=utf8mb4。
總結
以上是生活随笔為你收集整理的Mysql utf8mb3 utf8mb4 与UTF8 字符集参数(character_set_system)的说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自定义斗鱼礼物动画
- 下一篇: mysql utf8mb4 bin_My