《MYSQL保存特殊字符失敗,用編碼utf8mb4解決錯(cuò)誤 Incorrect string value ...解決方法》要點(diǎn):
本文介紹了MYSQL保存特殊字符失敗,用編碼utf8mb4解決錯(cuò)誤 Incorrect string value ...解決方法,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
相關(guān)主題:MYSQL安裝和配置
我們網(wǎng)站原來(lái)用的是UTF8,但是發(fā)現(xiàn)不少訪問(wèn)者會(huì)使用特殊字符,在保存時(shí),MYSQL就會(huì)出現(xiàn):
Incorrect string value: \xF0\x9F\x92\x90.....
我們用的維易PHP MVC框架,可以在日志中看到要保存的原始內(nèi)容,審核了日志后發(fā)現(xiàn)應(yīng)該是幾個(gè)特殊字符導(dǎo)致的保存失敗。
問(wèn)題解決方法:
只要把表格設(shè)置成utf8mb4即可。不能再用utf8了。
系統(tǒng)解決需要做以下幾方面:
1、在my.cnf中添加選項(xiàng):
2、修改數(shù)據(jù)庫(kù)的表格編碼選項(xiàng)。
3、PHP在查詢MYSQL時(shí)的編碼指定。
以上三方面,我們?cè)敿?xì)說(shuō)明:
一、在my.cnf中添加選項(xiàng):
[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4'
上面最后一行 init_connect='SET NAMES utf8mb4' 可以不用設(shè)置。如果你的PHP中查詢有執(zhí)行它就可以了。
2、修改數(shù)據(jù)庫(kù)的表格編碼選項(xiàng)。
即修改每個(gè)數(shù)據(jù)庫(kù)的表格創(chuàng)建選項(xiàng),分別從數(shù)據(jù)庫(kù)、表格、字段三部份的編碼修改(字段可以不用處理)。
A、數(shù)據(jù)庫(kù)編碼:
ALTER DATABASE `your_db_name` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
B、表格編碼:
ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
C、字段編碼(非必須,可不必執(zhí)行):
這里若要執(zhí)行,只需要修改字符字段即可:
ALTER TABLE `table_name` CHANGE `column_name` `column_name` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
然后,
你的PHP在每次執(zhí)行時(shí),先執(zhí)行一次 'SET NAMES utf8mb4' 即可。
這個(gè)問(wèn)題務(wù)必注意,特別是對(duì)保存一些社交帳號(hào)的數(shù)據(jù)庫(kù),比如微信號(hào)昵稱(chēng)
utf8mb4編碼是MySQL 5.5.3版本后增加了的,其中的mb4就是most bytes 4的意思,專(zhuān)門(mén)用來(lái)兼容四字節(jié)的unicode。
utf8mb4是utf8的超集,原來(lái)使用utf8字符集的,修改為utf8mb4的不會(huì)對(duì)原有的utf8編碼讀取產(chǎn)生任何問(wèn)題。
保存微信用戶信息時(shí),如果用戶昵稱(chēng)帶有emoji表情符的,就要用utf8mb4編碼,否則會(huì)出現(xiàn)保存錯(cuò)誤。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/151.html