数据库中插入中文的时候报错ERROR 1366 (HY000): Incorrect string value: '\xE4\xB8\xAD\xE9\xAB\x98...' for column 'Cname' at row 1
在我们插入数据中有中文的时候会报错如下:
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
方法一:更改表的字符集格式
root@leadchina 04:35:11->set names latin1; Query OK, 0 rows affected (0.00 sec) root@leadchina 04:35:25->insert into school(name,age,dept) values('胡辉',15,'数学'); Query OK, 1 row affected (0.00 sec)
这种问题是由于我们在创建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,但是字符串格式的
方法三:
首先在系统中创建tablesname.sql的文件 将所要添加的内容加入进去
set names latin1; insert into school(name,age,dept) values('胡辉11',15,'数学22');
在使用source将文件导入进去就可以了
root@leadchina 08:57:14->source /root/school.sql;
但是方法一和方法三当退出mysql后再次查看后还是乱码
root@leadchina 09:00:39->select * from school; +----+-----------------+-----+-----------------+ | id | name | age | dept | +----+-----------------+-----+-----------------+ | 1 | test1 | 10 | shuxue | | 2 | test1 | 10 | shuxue | | 3 | test2 | 19 | huaxue | | 4 | test3 | 15 | huaxue | | 5 | 胡辉 | 15 | æ•°å¦ | | 6 | 胡辉11 | 15 | æ•°å¦22 | +----+-----------------+-----+-----------------+
要想永久生效,需要在mysql的配置my.cnf 在[client]模块中加入:default-character-set=latin1,在mysqld模块中增加
character-set-server=latin1
最好是将库设置为utf-8的格式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!