utf8和 utf8mb4的區(qū)別
utf8mb4是在Mysql 5.5.3之后添加的啤贩,mb4代表most bytes 4温数,一個字符最我占用4個字節(jié)唇聘,用來兼容4字節(jié)的Unicode字符楔绞,比如微信中的表情字符慎菲。utf8其實(shí)是utf8mb3框喳,一個字符最多占用3個字節(jié)课幕,utf8無法保存4個字節(jié)的Unicode字符。utf8mb4是utf8的超集五垮,utf8轉(zhuǎn)成utf8mb4乍惊,內(nèi)容不會發(fā)生任何改變,沒有任何兼容性問題放仗。使用utf8mb4润绎,在不使用char類型的字段時,同樣的字符串也不會占用更多的空間,所以建議在普遍使用varchar的情況下莉撇,都使用默認(rèn)的utf8mb4字符集呢蛤。
utf8mb4下的Collation(排序規(guī)則)的命名規(guī)則
在創(chuàng)建數(shù)據(jù)庫時,在選定字符集之后棍郎,還需要指定使用該字符集下的哪個排序規(guī)則其障,針對utf8mb4默認(rèn)的Collation是
utf8mb4_0900_ai_ci,是utf8mb4字符集一個新的通用排序歸類涂佃。 中間的0900励翼,它對應(yīng)的是Unicode 9.0的規(guī)范。最后兩部分_ai_ci巡李,ai表示accent insensitivity抚笔,也就是“不區(qū)分音調(diào)”,而ci表示case insensitivity侨拦,也就是“不區(qū)分大小寫”殊橙。
修改字符集的相關(guān)SQL語句
修改數(shù)據(jù)庫默認(rèn)字符集:
ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];
把表默認(rèn)的字符集和所有字符列(CHAR,VARCHAR,TEXT)改為新的字符集:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]
# 如:ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
只是修改表的默認(rèn)字符集:
ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];
# 如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
修改字段的字符集:
ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
# 如:ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
查看字符集
# 查看數(shù)據(jù)庫編碼:
SHOW CREATE DATABASE db_name;
# 查看表編碼:
SHOW CREATE TABLE tbl_name;
# 查看字段編碼:
SHOW FULL COLUMNS FROM tbl_name;