MySQL的字符集與字符排序規則
- 字符集
規定存儲的數據編碼格式。 - 字符排序規則
在規定的存儲的數據編碼格式下的比較規則,如區分不區分大小寫等
以前開發中常使用的MySQL字符集是utf8
,字符排序規則是utf8_general_ci
說明:
-
常見的字符集有
utf8
和utf8mb4
兩種,在MySQL中utf8
編碼最多支持3字節的數據,utf8mb4
最多支持4個字節的數據,移動端的表情數據是4個字節的字符,所以必須使用utf8mb4
格式才能正確的存儲. -
常見的字符排序規則有
utf_bin
和utf_general_ci
兩種,bin 是二進制, a 和 A 會別區別對待.例如你運行:select * from table where a = 'a';
那麼在utf8_bin
中你就找不到 a = ‘A’ 的那一行, 而utf8_general_ci
則可以.utf8_general_ci
校對速度快,但準確度稍差。(準確度夠用,一般建庫選擇這個
)
現在的說法是 爲了獲取更好的兼容性,應該總是使用 utf8mb4
而非 utf8
. 對於 CHAR 類型數據,utf8mb4 會多消耗一些空間,根據 Mysql 官方建議,使用VARCHAR
替代CHAR
。
查看當前MySQL的字符集與字符排序規則
\s
簡單的查看MySQL的字符集
SHOW VARIABLES LIKE'%char%'
詳細單的查看MySQL的字符集
SHOW VARIABLES LIKE'%collation%'
詳細單的查看MySQL的字符排序規則
MySQL的字符集與字符排序規則設置
-
設置MySQL數據庫的編碼方式有三種,分別是基於
session會話的
、基於全局gloable的
、永久性改變的
。-
session會話級別設置MySQL的字符集與字符排序規則
- 命令:
set character_set_database=utf8;
set character_set_server=utf8;
- 作用範圍: 本次會話,只在這個命令窗口有效
- 命令:
-
全局設置MySQL的字符集與字符排序規則
- 命令:
set global character_set_database=utf8;
set global character_ser_server=utf8;
- 作用範圍: 本次服務有效,重啓服務失效
- 命令:
-
永久性設置MySQL的字符集與字符排序規則
- 在MySQL的配置文件
my.ini
中修改: - 作用範圍:永久有效。
- 在MySQL的配置文件
-
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
查看某個數據庫的字符集與字符排序規則
show create database database_name
use information_schema;
select * from
SCHEMATAwhere
SCHEMA_NAME= 'mytest';
數據庫或表的字符集與字符排序規則設置
- MySQL提供了不同級別的設置,包括
server級
、database級
、table級
、column級
,可以根據具體的需求非常精準的設置具體的編碼。- database 級設置
-- 創建數據庫時指定編碼
CREATE DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
-- 修改原有的數據庫編碼
ALTER DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
- table級設置
-- 創建數據庫時指定編碼
CREATE DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
-- 修改原有表的編碼
ALTER TABLE tbl_name
[[DEFAULT] CHARACTER SET charset_name]
[COLLATE collation_name]
參考
數據庫字符集和排序規則
utf8和utf8mb4的區分
設置MySQL的字符編碼
再見亂碼:5分鐘讀懂MySQL字符集設置
表字符集和排序規則