【发布时间】:2020-03-15 14:57:09
【问题描述】:
-- 2 Moderators: please do not re-format my code
DROP TABLE IF EXISTS `t`;
CREATE TABLE `t` (
`v` VARCHAR(3) NOT NULL COLLATE 'latin1_general_ci'
, `c` CHAR(3) NOT NULL COLLATE 'latin1_general_ci'
, INDEX `IX_t_v` (`v`)
, INDEX `IX_t_c` (`c`)
)
;
INSERT INTO t
(v, c)
VALUES
('001', '001')
, ('002', '002')
, ('003', '003')
, ('004', '004')
;
EXPLAIN SELECT c FROM t WHERE c = '001';
EXPLAIN SELECT v FROM t WHERE v = '001';
解释命令给了我:
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t ref IX_t_c IX_t_c 3 const 1 100.00 Using index
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t ref IX_t_v IX_t_v 5 const 1 100.00 Using index
问题是:为什么第二个查询的 key_len 是 5?
基于CHAR and VARCHAR Types,VARCHAR(3) NOT NULL 的存储要求应该是 4,所以我预计 key_len 会是一样的!
我在这里错过了什么?
谢谢。
附: MySQL 5.7 和 MariaDB 10.1 给我的结果是一样的。
【问题讨论】: