今天在日常维护中遇到几个个小问题,比较有意思
1. 在数据迁移后,重新数据失败,发现报错
ERROR 1136 (21S01): 。。。。。
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了

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

被折叠的 条评论
为什么被折叠?



