【MYSQL】char、varchar


# 在临时表中,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`;


请使用浏览器的分享功能分享到微信等