MySQL數(shù)據(jù)庫經(jīng)典錯(cuò)誤 九 數(shù)據(jù)庫總會(huì)出現(xiàn)中文亂碼的情況
數(shù)據(jù)庫總會(huì)出現(xiàn)中文亂碼的情況
有同學(xué)經(jīng)常會(huì)問,為什么我的數(shù)據(jù)庫總會(huì)出現(xiàn)中文亂碼的情況。一堆中文亂碼不知道怎么回事?當(dāng)向數(shù)據(jù)庫中寫入創(chuàng)建表,并插入中文時(shí),會(huì)出現(xiàn)這種問題。此報(bào)錯(cuò)會(huì)涉及數(shù)據(jù)庫字符集的問題。
解決思路:對(duì)于中文亂碼的情況,記住老師告訴你的三個(gè)統(tǒng)一就可以。還要知道在目前的 MySQL 數(shù)據(jù)庫中字符集編碼都是默認(rèn)的 UTF8。
處理辦法:
數(shù)據(jù)終端,也就是我們連接數(shù)據(jù)庫的工具設(shè)置為 utf8。
操作系統(tǒng)層面,可以通過 cat /etc/sysconfig/i18n 查看,也要設(shè)置為 utf8。
數(shù)據(jù)庫層面,在參數(shù)文件中的 mysqld 下,加入 character-set-server=utf8。
Emoji 表情符號(hào)錄入 MySQL 數(shù)據(jù)庫中報(bào)錯(cuò):
Caused by: java.sql.SQLException: Incorrect string value: ‘e??—e?…’ 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)
解決思路:針對(duì)表情插入的問題,一定還是字符集的問題。
處理方法:我們可以直接在參數(shù)文件中,加入:
vim /etc/my.cnf
[mysqld]
init-connect=’SET NAMES utf8mb4′
character-set-server=utf8mb4
注:utf8mb4 是 utf8 的超集。