MySQL-MySQL插入中文1366报错

文章讲述了作者在数据迁移过程中遇到的两个技术问题:一是数据迁移后重新插入数据报错1136,解决原因是字符集不匹配;二是接口调用时查询效率低,源于索引失效,通过创建新表重现并调整字符集解决。

今天在日常维护中遇到几个个小问题,比较有意思

1.  在数据迁移后,重新数据失败,发现报错

ERROR 1136 (21S01): 。。。。。

2.  在接口调用时,发现查询效率极其低下,估计是索引失效

这里新建一个表复现一下

目录

1. 插入中文报错1366

2. 索引失效的小问题

总结:


1. 插入中文报错1366

新建一个test数据库以及一个emp表

create table emp(
   
id int unique primary key,
  • name varchar( 10),
  • age int,
  • gender char( 1)
  • )
  • 依次展开故事

    此时insert插入数据

     insert into emp values(1,'张三',12,'男'),(2,'李四',18,'女');
      

    会发现报一个错

    1366,这个错误就是在mysql表中有一个或者多个字段的编码不是utf-8

    解决:

    通过show create table emp 查看,发现数据表中的内容为latin1字符集

    于是,给这张表重新设置字符集

    alter table emp default character set utf8;
      

     

    然后,重新去插入数据

    依然报错,查看建表语句,发现字符集确实是utf8

    是因为表设置了,但是行依然是latin1字符集

    给行也设置

     alter table emp change gender gender varchar(20) character set utf8;
      

     此时再去插入就OK了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值