標籤:編碼格式 支援 sql 4類 mysqld 背景 多表 資料 表情
背景: 使用者輸入的表單裡邊。存在 手機內建的表情, 在執行插入時候報錯
Incorrect string value: ‘\xF0\x9F\x92\x8BTi...‘
錯誤原因:我們在設定mysql編碼格式時一般 utf-8 格式,是不支援帶四位元組的字串插入的。
解決方案:
1.升級MySQL,然後將對應的資料類型改為utf8mb4類型(mysql 版本 >= 5.5)
2.出現的四位元組UTF-8字元過濾或轉化為自訂類型
方法1 : (不能只改表名字的編碼而忽略了欄位的編碼,親測。必須兩個都改才可以)
直接升級mysql ,把對應的欄位改為 utf-8mb4 即可
方法2: (沒試,網上找的)
$str = preg_replace(‘/[\x{10000}-\x{10FFFF}]/u‘, ‘‘, $str);
番外: (網上查的資料)
對於mysql 5.5 而言,如果不設定字元集,mysql預設的字元集是 latin1 拉丁文字元集;
為了統一管理和應用開發的方便,一般都會統一將作業系統,用戶端,資料庫各方面的字元集都設定為 utf8 字元集,即能滿足各種字元應用,又能統一字元集,避免各種亂碼問題。 但隨著各種業務的進一步發展,除了各個國家的本身語言字元,經常也會有一些Emoji出現在應用程式中,而在mysql 5.5 之前,UTF-8編碼只支援1-3個位元組,支援BMP這部分的Unicode編碼區;從MySQL 5.5開始,可以支援4個位元組UTF編碼 utf8mb4 ,一個字元能夠支援更多的字元集,也能夠支援更多Emoji。 utf8mb4相容utf8,且比utf8能表示更多的字元,是utf8字元集的超集。所以現在一些新的業務,比如ISO等,會將MySQL資料庫的字元集設定為utf8mb4。 今天在處理一個應用需求的時候,就遇到這樣一個問題:應用所有的用戶端都是utf8字元集,MySQL資料庫也是utf8字元集,但現在有業務需要使用mb4部分增加的字元,需要MySQL資料調整字元集。 當然調整的最好方法是用戶端,mysql資料庫的字元集都修改為utf8mb4,但這樣修改量比較大,而且如果用戶端一部分修改為utf8,一部分為utf8mb4的話,容易發生混亂。所以業務需要所有用戶端的utf8字元集不變,仍讓保持為統一的utf8,只修改MySQL資料庫端,保證用戶端串連的utf8字元集串連到資料使用後,能夠當做utf8mb4字元來使用。 經過幾次測試後,MySQL資料庫的my.cnf中關於字元集的配置修改為下面的配置了:
[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
【Mysql】解決插入資料出現 Incorrect string value: '\xF0\x9F\x92\x8BTi...'錯誤