在使用MySQL插入中文字符時,出現報錯
ERROR 1366: 1366: Incorrect string value: '\xE6\x87\x82' for column 'username' at row 1
1
分析:
這里報錯的原因是你要插入的一個中文字段報錯
所以這里是你的字段編碼方式與你的 傳遞的字符集 編碼方式不匹配
這里中文字符一般用utf8 或 gbk
查看表中每個字段的編碼方式
show full columns from 表名;
1
這里會發現我們想插入的字段username 是latin1 編碼,非utf8 和 gbk
所以這里我們只需通過
更改字段編碼方式
alter table 表名 change 字段名 字段名 字段數據類型 character set 字符編碼方式;
1
這里建議字符編碼方式都改為utf8,因為utf8 兼容性在很多平台上會更好。
所以在這里是
alter table user change username username varchar(16) character set utf8;
1
更改后再用上述方式查詢:
發現username 字段編碼變為 utf8
就可以解決這個問題了
也就你想哪個字段插入中文字符就查看一下他的字符編碼是不是latin1
如果是,就把它改為utf8 或者 gbk
原因:
是在創建數據庫是沒有指定數據庫的編碼模式,所以默認的編碼方式為latin1。
查看指定數據庫的編碼方式
show create database 數據庫名;
1
查詢后會出現:
CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */
1
這里會發現 character set 為 latin1
更改數據庫編碼方式
alter database 庫名 charset = 編碼方式;
1
查看指定表的編碼方式
show create table 表名;
1
查詢后會出現
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(16) DEFAULT NULL,
`password` varchar(16) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1
2
3
4
5
6
這里也會發現 charset 為 latin1
更改表的編碼方式
alter table 表名 charset = 編碼方式;
1
注: 通過這個方式改變表的編碼方式只能決定這個再次增加加字段時的字段編碼方式,而無法影響已經建好的字段。
所以這個時候再次查詢表的編碼方式時:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(16) CHARACTER SET latin1 DEFAULT NULL,
`password` varchar(16) CHARACTER SET latin1 DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
1
2
3
4
5
6
可以看到表的編碼方式變為了utf8
而username , password 字段后則加上了 latin1
說明這兩個更改前已經建好的字符字段只更改表的編碼方式影響不了它們;
注: 當字段的編碼方式與表的編碼方式相同時,不會顯示該字段的編碼方式。
所以最終都是要通過
alter table 表名 change 字段名 字段名 字段數據類型 character set 字符編碼方式;
1
來更改字段的編碼方式
建議:在創建數據庫以及創建表的時候后面都加上charset - utf8 就不會出現這種中文字符產生的問題了;
————————————————
版權聲明:本文為CSDN博主「Mr.路痴」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_43054397/article/details/90906630