《MYSQL保存特殊字符失敗,用編碼utf8mb4解決錯誤 Incorrect string value ...解決方法》要點:
本文介紹了MYSQL保存特殊字符失敗,用編碼utf8mb4解決錯誤 Incorrect string value ...解決方法,希望對您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:MYSQL安裝和配置
我們網(wǎng)站原來用的是UTF8,但是發(fā)現(xiàn)不少訪問者會使用特殊字符,在保存時,MYSQL就會出現(xiàn):
Incorrect string value: \xF0\x9F\x92\x90.....
我們用的維易PHP MVC框架,可以在日志中看到要保存的原始內(nèi)容,審核了日志后發(fā)現(xiàn)應(yīng)該是幾個特殊字符導(dǎo)致的保存失敗。
問題解決方法:
只要把表格設(shè)置成utf8mb4即可。不能再用utf8了。
系統(tǒng)解決需要做以下幾方面:
1、在my.cnf中添加選項:
2、修改數(shù)據(jù)庫的表格編碼選項。
3、PHP在查詢MYSQL時的編碼指定。
以上三方面,我們詳細(xì)說明:
一、在my.cnf中添加選項:
[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ù)庫的表格編碼選項。
即修改每個數(shù)據(jù)庫的表格創(chuàng)建選項,分別從數(shù)據(jù)庫、表格、字段三部份的編碼修改(字段可以不用處理)。
A、數(shù)據(jù)庫編碼:
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í)行時,先執(zhí)行一次 'SET NAMES utf8mb4' 即可。
這個問題務(wù)必注意,特別是對保存一些社交帳號的數(shù)據(jù)庫,比如微信號昵稱
utf8mb4編碼是MySQL 5.5.3版本后增加了的,其中的mb4就是most bytes 4的意思,專門用來兼容四字節(jié)的unicode。
utf8mb4是utf8的超集,原來使用utf8字符集的,修改為utf8mb4的不會對原有的utf8編碼讀取產(chǎn)生任何問題。
保存微信用戶信息時,如果用戶昵稱帶有emoji表情符的,就要用utf8mb4編碼,否則會出現(xiàn)保存錯誤。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/151.html