今天在用mysql存儲從微信服務器拉來的數據,出現插入數據異常,報 Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F 的錯誤。
最終在網上查了一下,有幾個解決方案:
方案一:
如果是用thinkphp開發的話,在tinhkphp config.php中連接數據庫配置文件中 設置
'DB_CHARSET'=> 'utf8mb4', // 字符集
這樣就可以解決問題。
如果沒用thinkphp開發,直接使用php開發的話,在執行sql語句的時候,要添加
mysql_query("set names utf8");或者 mysql_query("set character_set_client utf8mb4");
方案二:
把mysql數據庫升級到5.5以上,然后數據庫編碼設置為utf8mb4,字段的編碼最好也為utf8mb4。
問題:用戶個人信息設置時使用emoji表情,MySQL如果不是utf8mb4會導致異常。
SHOW VARIABLES LIKE 'collation_%'; -----查看mysql 系統編碼
SHOW VARIABLES LIKE 'char%';
SET NAMES utf8; ----相當於設置了 character_set_client、character_set_connection、character_set_results
SET NAMES utf8mb4;
SET character_set_client=utf8mb4; ----針對特殊字符
SET character_set_connection=utf8mb4;--針對特殊字符
SET character_set_results=utf8mb4;
總之,就是在character_set_client或者character_set_connection中,至少一個的編碼為utf8mb4。
SHOW VARIABLES LIKE 'collation_%'; -----查看mysql 系統編碼
SHOW VARIABLES LIKE 'char%';
SET NAMES utf8; ----相當於設置了 character_set_client、character_set_connection、character_set_results
SET NAMES utf8mb4;
SET character_set_client=utf8mb4; ----針對特殊字符
SET character_set_connection=utf8mb4;--針對特殊字符
SET character_set_results=utf8mb4;
總之,就是在character_set_client或者character_set_connection中,至少一個的編碼為utf8mb4。
utf8mb4這種格式,就是為了兼容手機端的,比UTF-8多了好多格式,包括了UTF-8的格式。