数据库中插入中文的时候报错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的格式

posted @   闲着没事学学习  阅读(522)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示