但隨著各種業(yè)務(wù)的進(jìn)一步發(fā)展,除了各個(gè)國(guó)家的本身語(yǔ)言字符曼追,經(jīng)常也會(huì)有一些表情符號(hào)出現(xiàn)在應(yīng)用程序中窍仰,而在mysql 5.5 之前,UTF-8編碼只支持1-3個(gè)字節(jié)礼殊,支持BMP這部分的Unicode編碼區(qū)驹吮;從MySQL 5.5開(kāi)始,可以支持4個(gè)字節(jié)UTF編碼 utf8mb4 晶伦,一個(gè)字符能夠支持更多的字符集碟狞,也能夠支持更多表情符號(hào)。
utf8mb4兼容utf8婚陪,且比utf8能表示更多的字符族沃,是utf8字符集的超集。所以現(xiàn)在一些新的業(yè)務(wù)泌参,比如ISO等脆淹,會(huì)將MySQL數(shù)據(jù)庫(kù)的字符集設(shè)置為utf8mb4。
今天在處理一個(gè)應(yīng)用需求的時(shí)候沽一,就遇到這樣一個(gè)問(wèn)題:
當(dāng)然調(diào)整的最好方法是客戶(hù)端盖溺,mysql數(shù)據(jù)庫(kù)的字符集都修改為utf8mb4,但這樣修改量比較大铣缠,而且如果客戶(hù)端一部分修改為utf8烘嘱,一部分為utf8mb4的話(huà),容易發(fā)生混亂蝗蛙。
經(jīng)過(guò)幾次測(cè)試后蝇庭,MySQL數(shù)據(jù)庫(kù)的my.cnf中關(guān)于字符集的配置修改為下面的配置了
[client]?
? ? default-character-set=utf8mb4?
?[mysqld]?
? ? character-set-server = utf8mb4?
? ? collation-server = utf8mb4_unicode_ci?
? ? init_connect='SET NAMES utf8mb4'?
? ? skip-character-set-client-handshake = true?
? ? [mysql]?
? ? default-character-set = utf8mb4
其中collation-server 這些設(shè)置為utf8mb4字符集是比較容易理解的,就是將MySQL數(shù)據(jù)庫(kù)相關(guān)的字符集都設(shè)置為utf8mb4歼郭;
init_connect='SET NAMES utf8mb4' 表示初始化連接都設(shè)置為utf8mb4字符集遗契,再配置一個(gè)?
這些參數(shù)在my.cnf配置好后,重啟mysql實(shí)例讓設(shè)置生效病曾。