現(xiàn)象:
將Emoji表情存入數(shù)據(jù)庫(kù)時(shí),報(bào)如下錯(cuò)誤:
Incorrect string value: '\xF0\x9F\x99\x83\xF0\x9F...' for column 'XXX' at row 1
?error code [1366]; Incorrect string value: '\xF0\x9F\x99\x83\xF0\x9F...'?
原因:
這個(gè)問(wèn)題的主要原因就是MySQL使用的是ut8編碼暴拄,utf8編碼默認(rèn)每個(gè)字符3個(gè)字節(jié)肋拔,而Emoji表情使用的Unicode編碼占4個(gè)字節(jié),所以寫(xiě)入數(shù)據(jù)庫(kù)的時(shí)候會(huì)寫(xiě)入失敗并報(bào)錯(cuò)藏姐。
解決辦法:
一隆箩、首先確認(rèn)數(shù)據(jù)庫(kù)、表羔杨、字段的編碼是否是utf8m64捌臊,如果是,就跳過(guò)這一步兜材。如果不是理澎,先把這些字符集都改為utf8m64:
# 修改數(shù)據(jù)庫(kù):
ALTER DATABASE database_name CHARACTERSET= utf8mb4 COLLATE = utf8mb4_general_ci;
# 修改表:
ALTER TABLE table_name CONVERTTOCHARACTERSETutf8mb4 COLLATE utf8mb4_general_ci;
# 修改表字段:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTERSETutf8mb4 COLLATE utf8mb4_general_ci;
二逞力、然后解決代碼。代碼中有兩種解決辦法:
1.針對(duì)需要的字段改:
在Dao層加一個(gè)方法:
'charset' => Env::get('database.charset', 'utf8mb4'),