資料庫中插入中文的時候報錯ERROR 1366 (HY000): Incorrect string value: '\xE4\xB8\xAD\xE9\xAB\x98...' for column 'Cname' at row 1
阿新 • • 發佈:2022-02-22
在我們插入資料中有中文的時候會報錯如下:
root@leadchina 07:43:32->INSERT INTO student VALUES(0001,'巨集志','男',30,'計算機網路'); ERROR 1366 (HY000): Incorrect string value: '\xE5\xAE\x8F\xE5\xBF\x97' for column 'Sname' at row 1
這種問題是由於我們在建立table的時候預設的編碼格式是latin1,如下:
show create table SC; +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Table | Create Table |+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| SC | CREATE TABLE `SC` ( `SCid` int(12) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `Cno` int(10) NOT NULL COMMENT '課程號', `Sno` int(10) NOT NULL COMMENT '學號', `Grade` tinyint(2) NOT NULL COMMENT '分數', PRIMARY KEY (`SCid`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 | +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
此時我們需要通過一下命令修改編碼格式
alter table SC default character set utf8;
再去插入之前的中文還是一會提示同樣的錯誤
root@leadchina 07:48:47->show create table student; +---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | student | CREATE TABLE `student` ( `Sno` int(10) NOT NULL COMMENT '學號', `Sname` char(16) CHARACTER SET latin1 NOT NULL COMMENT '學號', `Ssex` char(2) CHARACTER SET latin1 NOT NULL COMMENT '性別', `Sege` tinyint(2) NOT NULL DEFAULT '0' COMMENT '學生年齡', `Sdept` varchar(16) CHARACTER SET latin1 DEFAULT NULL COMMENT '學生性別', PRIMARY KEY (`Sno`), KEY `INDEX_NAME` (`Sname`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
此時會發現雖然當前表的預設欄位已經修改為utf8,但是字串格式的