1. 程式人生 > >mysql資料庫使用insert語句插入中文資料報錯

mysql資料庫使用insert語句插入中文資料報錯

在mysql的命令列模式中,通過insert語句插入中文資料的時候報錯,類似於下面這樣:


Incorrect string value: '\xE7\x8F' for column 'name' at row 1

造成這個錯誤通常是由於建立資料表的時候使用了不正確的編碼格式,可以使用如下命令檢視操作的目標資料表的編碼格式。


SHOW CREATE TABLE 表名;

通過結果就可以看到目標表的目標欄位對應的編碼格式,我們只需要把該列的編碼格式轉化為utf8即可。


ALTER TABLE 表名 MODIFY 列名 資料型別 CHARACTER SET utf8 非空約束

例如:ALTER TABLE student MODIFY name VARCHAR(20) CHARACTER SET utf8 NOT NULL 

當然這只是一個臨時的解決辦法,更近一步的解決辦法是修改資料表的編碼,防止以後在使用命令新增資料列的時候,使用的仍是資料表的編碼。


ALTER TABLE 表名 DEFAULT CHARSET utf8;

然後這還不是最終的解決辦法,我們還可以通過修改資料庫的編碼方式來影響新建立的資料表的編碼方式,進而影響資料列的編碼方式。


ALTER DATABASE 資料庫名 DEFAULT CHARACTER SET utf8;

但是這需要我們每次在建立資料庫的時候都必須指定編碼方式,要想一勞永逸,我們可以直接去修改mysql的配置檔案,使用如下命令:


vim /etc/mysql/mysql.cnf.d/mysqld.cnf

新增如下配置


[mysqld]
character-set-server=utf8

儲存之後重新啟動mysql服務即可,命令如下(以Ubuntu16.04為例):


systemctl restart mysql.service

注意在設定編碼格式的時候,使用如下命令檢視支援的編碼格式:


SHOW VARIABLES LIKE 'char%'; 

來源:https://segmentfault.com/a/1190000017482480