# 隐式数据类型转换案例学习背景

+ 表定义:

```13
CREATE TABLE t3 (
 id int(11) NOT NULL AUTO_INCREMENT,
 ~!@k varchar(10)@!~ NOT NULL DEFAULT '0',
 c char(120) NOT NULL DEFAULT '',
 pad char(60) NOT NULL DEFAULT '',
 PRIMARY KEY (id) ,
 ~!@KEY k_2 (k)@!~
) 
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin 
AUTO_INCREMENT=1629882;
```

------------------------------------------------------------

当我们在数据库中对不同数据类型进行运算时(比如 where 子句过滤 a=1 或者表连接 a.id=b.id)，为了操作兼容，数据库会对相关类型进行隐式数据类型转换。我们通过例子，介绍下隐式类型转换带来的问题。

具体案例

我们有这样一张表：

```
CREATE TABLE t3 (
 id int(11) NOT NULL AUTO_INCREMENT,
 k varchar(10) NOT NULL DEFAULT '0',
 c char(120) NOT NULL DEFAULT '',
 pad char(60) NOT NULL DEFAULT '',
 PRIMARY KEY (id) ,
 KEY k_2 (k)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=1629882;
```

其中字段 k 是 varchar 类型，并且 k 上有普通索引 k_2，我们来看下下面的一个"普通"的 SQL 以及执行计划：
