# 在临时表中,char与varchar一样,会将所有varchar转为char
# 最大值: char是255个(2的8次方), varchar是65535
MYSQL限制(无视引擎)每行所有列的总字节数不能超过 65535个字节。为何这么设计
innodb:1个page=16K,每页2行最多8K
# 假如utf8字符集,1个字符=3个字节
DROP TABLE IF EXISTS `tb_col_char_varchar`;
CREATE TABLE `tb_col_char_varchar` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`cChar` CHAR(LC) NOT NULL,
`vChar` VARCHAR(LVC) NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
# 每行长度=1(系统) + 4 (int长度) + 3 * (LC+LVC) + varchar额外长度空间(1:小于255,2:其他) ,不能超过65535
# 尾部空格:char不保留,varchar保留。容易造成主键冲突
SET @val1:='c',@val2:='char',@val3:='chars',@val4:='c ',@val5:='c ',@val6:='c ';
INSERT INTO `tb_col_char_varchar`(`cChar`, `vChar`)
VALUES (@val1, @val1),(@val2, @val2),(@val3, @val3),(@val4, @val4),(@val5, @val5),(@val6, @val6);
#
SELECT `cChar`, `vChar`, CHAR_LENGTH(`cChar`), CHAR_LENGTH(`vChar`)
FROM `tb_col_char_varchar`;