[MySQL] 字符长度 vs 字节长度

1. 数据

CREATE TABLE `encode`  (
  `id` bigint NOT NULL,
  `latin1` varchar(30) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT 'Latin1, 别名 ISO-8859-1 (定长, 1字节)',
  `gbk` varchar(30) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL COMMENT 'GBK(变长, 2字节)',
  `utf8` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'utf8(变长, 3字节)',
  `utf8mb4` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'utf8mb4(变长, 4字节)',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB;

INSERT INTO `test`.`encode` (`id`, `latin1`, `gbk`, `utf8`, `utf8mb4`) VALUES (1, 'abc123!@#', '中国人abc123!@#,。、', '中国人abc123!@#,。、', '中国人abc123!@#,。、❤️🍇💯');

在这里插入图片描述
在这里插入图片描述

2. 测试


select LENGTH(latin1), LENGTH(gbk), LENGTH(utf8), LENGTH(utf8mb4) from encode
union
select CHAR_LENGTH(latin1), CHAR_LENGTH(gbk), CHAR_LENGTH(utf8), CHAR_LENGTH(utf8mb4) from encode;

在这里插入图片描述

3. 结论

  1. varchar存储最多65535个字节
    lanti1(定长, 1字节): 可存65535个字符
    gbk(变长, 2字节): 可存32767个字符
    utf8(变长, 3字节): 可存21845个字符
    utf8mb4(变长, 4字节): 可存16383个字符

  2. varchar(n), 这个n, 指的是字符, 而不是字节

  3. LENGTH: 字节长度, CHAR_LENGTH: 字符长度

4. 参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值