最近做的項目中,在插入 ?? 字符時報錯了
ERROR 1366: 1366: Incorrect string value: 'xF0x9Dx8Cx86' for column 'vl' at row 1
在苦苦掙扎了數小時后將其解決掉了~~ 只要將 utf8 轉到 utf8mb4 就行了
這個問題其實不是那末難,之所以花了比較長的時間來解決主要還是由于對 MySQL 的配置不是很清楚,還好使用的數據庫版本是 5.5.39,由于夠榮幸 在版本MySQL 5.5.3 (released in early 2010)時,恰好MySQL 支持了 utf8mb4 字符集。
具體 utf8 和 utf8mb4 的區分,可以參考https://mathiasbynens.be/notes/mysql-utf8mb4
下面把相應的解決方案貼出來,感謝大牛無處不在啊~~
要處理這樣的狀態肯定少不了更改 /etc/mysql/my.cnf 文件咯,具體文件的位置根據自己的配置查找吧。
我們查看下 MySQL Server 現有的字符集吧
這是我現在數據庫的配置
接下來我們在 my.cnf 中添加以下配置
[client]
default-character-set=utf8mb4
[server]
character_set_server=utf8mb4
配置后的情況
可以看到配置中的 client、connection、database、result、server 都是 utf8mb4 了。到這里其實就完成了 90%,只要驗證下就知道了。
很好,沒有報錯,接下來進行查詢,可以看看是不是能夠正常顯示
這1步也正確!
這樣我們對數據庫的配置也算完成了,不過還要注意的1個問題就是當前操作的數據庫、數據表、字段一樣是需要支持 utf8mb4 的
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
all done!
在做這個更改的進程中我其實同時使用了 mysql-workbench 和 mysql 進行訪問的, 但是奇怪的是
SHOW VARIABLES LIKE '%character%'
在 mysql 命令下顯示的是本地數據庫的配置,而在 mysql-workbench 中的卻不是,相當愁悶啊~~
可以看到 client、connection 等沒有被更改成 utf8mb4, 不知道是否是 mysql-workbench 是不是還有其他的配置,遺憾的是還沒有找到具體的配置方案,不過呢,作為臨時的解決方案,可以通過以下的命令來處理
SET NAMES utf8mb4
這樣感覺相當方便啊,1下子全給改掉了,不過不是持久的~~
~~噢噢,暫給出此種方案,知道緣由的帥哥靚妹還望給個提示呢 ^_^