問題描述:
將某個字符串$str 進行json編碼,即json_encode($str)后變成Unicode字符存入數據庫,會發現中文的長度明明沒有超過設置的字符長度最大值,但是卻拋出字段長度過長錯誤;
查看數據庫發現該字段的漢字字符被轉義成一些特殊的數字字母串(非unicode字符)
問題原因:
MySQL 僅支持從基本的多語種平面字符 (0×0000-0xFFFF)。請嘗試存儲一個同義詞相反:)
MySQL 5.5.3 以上 (其中尚未 GA), 支持補充字符如果您使用 UTF8MB4 編碼。
json_encode中文的時候,會把每個中文字符encode成“\uxxxx”, 而存進數據庫的時候,“\”被屏蔽了,直接變成”uxxxx”
如何解決:
-
方法一: php5.4版本可以json_encode($str,JSON_UNESCAPED_UNICODE)來避免中文漢字被轉化成unicode。但是如果漢字中存在"\t"字符串,取數據后json_decode(str)會轉化失敗;
-
方法二: json_encode(urlencode($str)) 將漢字先進行urlencode();然后json_encode();
取數據后urldecode();即:json_encode(urlencode($str)) 從數據庫取出來:urldecode($str) -
方法三: $str = json_encode($str);
$test= addslashes( $str ); //或
$test= mysql_escape_string( $str );
