UTF-8編碼有多是兩個、三個、四個字節。Emoji表情是4個字節,而Mysql的utf8編碼最多3個字節,因此數據插不進去。java
解決方案:將Mysql的編碼從utf8轉換成utf8mb4。web
CREATE TABLE IF NOT EXISTS we_contact( `id` INT AUTO_INCREMENT PRIMARY KEY, `openid` VARCHAR(50) NOT NULL COMMENT '用戶標識', `nickname` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '暱稱' )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
對於已建好的表sql
轉換成utf8mb4 命令:ALTER TABLE `TABLE_NAME` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; (將TABLE_NAME替換成你的表名) 將須要使用emoji的字段設置類型爲: 命令:ALTER TABLE `TABLE_NAME`MODIFY COLUMN `COLUMN_NAME` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
使用 java鏈接數據庫時數據庫
在Connector/J的鏈接參數中,不要加characterEncoding參數。 不加這個參數時,默認值就時autodetect。
使用PHP
框架
SET NAMES 'utf8mb4';
例如Yii框架中 db=>array('connectionString' => '...', 'charset' => 'utf8mb4' ),
測試MySQL版本
Server version: 5.6.20測試