Emoji表情符號錄入MySQL資料庫報錯的解決方案
前言:手機app應用評論的時候,恢復表情符號,提示失敗。
1,檢視tomcat後臺日誌,核心報錯資訊如下:
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...' for column 'CONTENT' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:80)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteUpdate(MappedStatement.java:216)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:94)
... 46 more
[root@mysqlvm2 ~]# mysql -root -p
mysql> use test;
Database changed
mysql> show tables;
Ignoring query to other database
mysql> Ctrl-C -- exit!
Aborted
忘記輸入-u引數了,沖洗你輸入,OK,如下所示:
[root@mysqlvm2 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.12-log Source distribution
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql> use test;
Database changed
mysql> show tables;
+------------------------+
| Tables_in_test |
+------------------------+
| c |
| lubin_test |
| test |
| tt |
+------------------------+
10 rows in set (0.00 sec)
這種輸入Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...'的問題,多數都是字符集的,以前從latain改成gbk,從gbk改成utf8,而我的CONTENT欄位已經utf8了,那麼比utf8更多的就只有utf8mb4了,所以去修改表欄位的字符集吧。
mysql>
2,先去修改表欄位字符集為utf8mb4:
ALTER TABLE UGC_REVIEW_CONTENT MODIFY `CONTENT` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '評論內容';
執行完後,再在手機端的app測試,依然報同樣的錯誤。
3,再去修改表字符集utf8mb4:
ALTER TABLE UGC_REVIEW_CONTENT CHARSET=utf8mb4 COMMENT='曬單/推薦的評論內容';
執行完後,再在手機端的app測試,依然報同樣的錯誤。
4,再去修改資料庫的字符集utf8mb4:
vim my.cnf
init-connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
重啟mysql資料庫
[root@mysqlvm4 ~]# service mysql restart
Shutting down MySQL.... [確定]
Starting MySQL.............................................[確定]..
[root@mysqlvm4 ~]#
檢視db的字符集
mysql> show variables like '%char%';
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)
mysql>
在手機app端重新評論,輸入表情符號,點選提交提示評論成功。
5,問題分析總結:
㈠ 原因
普通的字串或者表情都是佔位3個位元組,所以utf8足夠用了,但是移動端的表情符號佔位是4個位元組,普通的utf8就不夠用了,為了應對無線網際網路的機遇和挑戰、避免 emoji 表情符號帶來的問題、涉及無線相關的 MySQL 資料庫建議都提前採用 utf8mb4 字符集,這必須要作為移動網際網路行業的一個技術選型的要點
㈡ 限制
需要 >= MySQL 5.5.3版本、從庫也必須是5.5的了、低版本不支援這個字符集、複製報錯。
參考文章地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26230597/viewspace-1243233/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 資料庫儲存 Emoji 表情及特殊符號MySql資料庫符號
- php+mysql 解決emoji表情符號問題PHPMySql符號
- emoji等表情符號存mysql的方法符號MySql
- MYSQL資料庫與Emoji表情的故事MySql資料庫
- Android Jetpack - Emoji表情符號初探AndroidJetpack符號
- Mysql伺服器無法存emoji表情的解決方案MySql伺服器
- 微信表情符號寫入案件判決符號
- 【BUG記錄】MySQL插入Emoji表情報錯"Incorrect string value"MySql
- Mysql支援emoji 表情符號 升級編碼為UTF8MB4MySql符號
- MYSQL資料庫表記錄刪除解決方案MySql資料庫
- MySQL資料庫常見錯誤及解決方案MySql資料庫
- mysql 儲存emoji表情MySql
- MySQL儲存 emoji 表情MySql
- win10自帶字元表情如何使用_win10 emoji表情符號的使用教程Win10字元符號
- PHP連線SQL資料庫無法顯示emoji表情的解決辦法(變成問號、1366 Incorrect string value)PHPSQL資料庫
- MySQL插入資料1366錯誤解決方案MySql
- 新表情符號Emoji 14.0草案名單公佈 握手錶情符號可定製膚色符號
- 【Mysql】關於mysql存入emoji表情的問題MySql
- 解決Mysql資料庫插入資料出現問號(?)的解決辦法MySql資料庫
- e新表情符號Emoji 14.0草案名單公佈 握手錶情符號可定製膚色符號
- MySQL 啟動服務報錯解決方案MySql
- mysql匯入報錯怎麼解決?MySql
- 解決UNIX下@符號報SP2-0734錯誤符號
- Mysql資料庫使用Navicat Mysql匯入sql檔案報錯MySql資料庫
- iOS Emoji表情編碼/解碼iOS
- 解決動態庫的符號衝突符號
- 一次資料庫匯入解決方案資料庫
- 【MySQL篇】Navicat匯入SQL大檔案報錯終極解決方案MySql
- PbootCMS資料庫配置,修改為Mysql資料庫,配置Mysql出錯解決辦法boot資料庫MySql
- 海量資料庫解決方案資料庫
- 使用 localhost 無法連線 MySQL 資料庫的解決方案localhostMySql資料庫
- 【JavaWeb錯誤集錦】有關Cookie不支援逗號、空格等特殊符號並報出伺服器500錯誤的解決方案JavaWebCookie符號伺服器
- [MySQL] MySQL資料庫中唯一識別符號(ID)的梳理總結MySql資料庫符號
- maven報錯:找不到符號Maven符號
- 瞭解MySQl資料庫目錄MySql資料庫
- Percona Toolkit工具連線MySQL 8報錯的解決方案MySql
- 雲資料庫安全解決方案資料庫
- 資料庫回檔解決方案資料庫