【Mysql】解決插入數據出現 Incorrect string value: '\xF0\x9F\x92\x8BTi...'錯誤


 

背景: 用戶輸入的表單里邊。存在 手機自帶的表情,  在執行插入時候報錯

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 字符集,即能滿足各種字符應用,又能統一字符集,避免各種亂碼問題。
 
 
但隨着各種業務的進一步發展,除了各個國家的本身語言字符,經常也會有一些表情符號出現在應用程序中,而在mysql 5.5 之前,UTF-8編碼只支持1-3個字節,支持BMP這部分的Unicode編碼區;從MySQL 5.5開始,可以支持4個字節UTF編碼 utf8mb4 ,一個字符能夠支持更多的字符集,也能夠支持更多表情符號。
 
 
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  

 

 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM