MySQL在表中插入中文时报错:ERROR 1366 (HY000)/ Incorrect string value/ '\xE6\x9D\x8E\xE5\x8B\x87' for column 'S

一、错误提示

ERROR 1366 (HY000): Incorrect string value: ‘\xE6\x9D\x8E\xE5\x8B\x87’ for column ‘Sname’ at row 1

二、过程描述
1.创建如下表
#建立一个学生表 
Create TABLE Student
	(Sno CHAR(9) PRIMARY KEY not null,/*列级完整性约束,Sno是主码*/
   Sname CHAR(20) not null,
   Ssex CHAR(2),
   Sage SMALLINT,
   Sdept CHAR(20)
  );
2.插入如下元组
#向学生表插入数据
insert 
into Student(Sno,Sname,Ssex,Sage,Sdept)
values('201215121','李勇','男',20,'CS');
3.报错如下
ERROR 1366 (HY000): Incorrect string value: '\xE6\x9D\x8E\xE5\x8B\x87' for column 'Sname' at row 1
  • 报错释义:第1行“sname”列的字符串值\xE6\x9D\x8E\xE5\x8B\x87不正确
  • 报错原因:原因是因为已建立的数据表,默认的字符集为latin1,latin1字符集为8bit,不能表示中文,故而报错。
三、解决
1.查看表建立结构
 show create table Student;
  • 显示如下
    在这里插入图片描述

  • 由最后一行的描述得知,默认的表字符集编码为latin1

2.修改表字符集编码为utf8
alter table Student default character set utf8;
  • 再次查看表建立结构

     show create table Student;
    
  • 显示如下

    在这里插入图片描述

  • 由最后一行的描述得知,默认的表字符集编码已经改为utf8

  • 但是当再次向表中插入元组数据时,仍然报错

    ERROR 1366 (HY000): Incorrect string value: '\xE6\x9D\x8E\xE5\x8B\x87' for column 'Sname' at row 1
    
  • 原因是上述知识修改了表的字符集编码为utf8,但是属性列的字符集编码仍为latin1(如上图红色矩形框所示)

3.修改属性列的字符集编码为utf8
alter table Student change Sname Sname varchar(20) character set utf8;
  • 再次查看表建立结构

  • 显示如下

    在这里插入图片描述

  • 由最后一行的描述得知,属性列Sname的字符集编码已经改为默认的utf8

  • 当再次向表中插入数据时,报错改成了属性列Ssex,说明刚刚改的属性列Sname的字符集编码已经通过

    ERROR 1366 (HY000): Incorrect string value: '\xE7\x94\xB7' for column 'Ssex' at row 1
    
  • 接着修改属性列Ssex的字符集编码为utf8即可

    alter table Student change Ssex Ssex varchar(20) character set utf8;
    
  • 再次向表中插入元组数据时,即可正常插入

    在这里插入图片描述

  • 如果由于其他属性列的字符集编码方式仍为latin1,导致仍然报错,那么如上方法,继续修改为utf8即可

4.如果数据表中有汉字,在建立表时,就应该指定字符集的编码方式为utf8
#建立一个学生表 
Create TABLE Student
	(Sno CHAR(9) PRIMARY KEY not null,		/*列级完整性约束,Sno是主码*/
   Sname CHAR(20) not null,
   Ssex CHAR(2),
   Sage SMALLINT,
   Sdept CHAR(20)
  )ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 在建表时指定字符集的编码方式为utf8后,后续即可正常插入元组数据
  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值