【MySQL数据库编码问题】报错:ERROR 1366 (HY000): Incorrect string value: \xD5\xC5\xC8\xFD for column T at row1

MySQL报错:ERROR 1366 : Incorrect string value: \xD5\xC5\xC8\xFD for column Tname at row 1

问题描述:

问题描述:
我的操作步骤:
1、创建数据库test,语句:
create database test;
2、创建T表:
create table T(Tno varchar(10) primary key,Tname varchar(50),Title varchar(10));
3、插入数据:
然后报错:ERROR 1366 (HY000): Incorrect string value: \xD5\xC5\xC8\xFD for column Tname at row 1就是说Tname列的数据值的字符集不正确。
怎么办?

解决方案

已建立的表无法插入中文字符串,原因是因为数据表中的内容为latin1字符集,由下图的的资料可知,latin1字符集为8bit,这说明它是不能表示中文的,故而当然会报改错

方案1

发现是字符集的问题,使用show variables like 'character%';可查看字符集设置
在这里插入图片描述
我之后使用set character_set_database=utf8;以及set character_set_server=utf8;修改了这两个的字符集。
在这里插入图片描述
创建新的数据库进行插入,即可正常插入中文。

至于修改字符集前的数据库,需要对其单独修改字符集(方案2),否则还是无法在此数据库插入中文。

方案2

解决方案:分别查看数据库、表、报错列字段的字符集,错误就是由于三者不一致造成的,设置一致.
我们先查看一下T数据表的字符集:
在mysql所在数据库输入命令行:show create table T;

可以发现,字段的字符集和数据表的字符集是不一致的,原因找到了!!
我们把字段的字符集改成utf8,与数据表一致,命令:

alter table Student change Tname Tname char(50) character set utf8;
alter table Student change Title Title char(50) character set utf8;

现在执行第3步的insert into 命令就成功了。
下面是具体问题
做个对比
如果不修改Tname的字符集latin1,插入中文给Tname时,将会报错ERROR 1366 (HY000): Incorrect string value: \xD5\xC5\xC8\xFD for column Tname at row 1
在这里插入图片描述
我们把字段的字符集改成utf8,与数据表一致,命令:alter table Student change Tname Tname char(50) character set utf8;
下图改了Tname,没有改Title,故而Tname没有报错,是Title报错 :
在这里插入图片描述
把Title也改了即可
在这里插入图片描述
现在执行第3步的insert into 命令就成功了。
在这里插入图片描述

注释(知识点):

(提示:以下内容都需要首先进入Mysql命令行客户端)

查看mysql的字符集(可直接粘贴使用):show variables where Variable_name like ‘%char%’;
查看某一个数据库字符集:show create database test;(注:test为数据库)
查看某一个数据表字符集:show create table Student;(注:Student为数据表)
可修改字符集的命令
mysql> set character_set_client=utf8;
mysql> set character_set_connection=utf8;
mysql> set character_set_database=utf8;
mysql> set character_set_results=utf8;
mysql> set character_set_server=utf8;
mysql> set character_set_system=utf8;
mysql> set collation_connection=utf8;
修改数据库test的字符集:
alter database test character set utf8;
修改数据表Student的字符集:
alter table Student character set utf8;
修改数据表字段Sname的字符集:
alter table Student change Sname Sname varchar(10) character set utf8;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值