为什么mysql中(utf8)varchar(size) size最大为21844?

utf8 编码的特点
  • utf8 是一种可变长度的 Unicode 编码。
  • 不同字符占用字节数不同:
    • ASCII 字符:1 个字节
    • 大多数常用汉字:3 个字节
    • 一些生僻字或特殊字符:4 个字节
  • varchar 头部占用:
    • varchar 字段在存储时,会额外占用 1 或 2 个字节来存储实际存储的字符数。
    • 当字符串长度小于或等于 255 时,占用 1 个字节。
    • 当字符串长度大于 255 时,占用 2 个字节。
  • 最大存储长度:
    • varchar 字段的最大存储长度为 65535 字节。

UTF-8 编码的特点与 MySQL VARCHAR 字段存储限制

VARCHAR 字段的存储结构

在 MySQL 中,VARCHAR 类型的字段在存储时,除了存储实际的字符数据外,还需要额外存储字符串的长度信息。具体而言:

  • 当字符串长度小于或等于 255 个字符时,VARCHAR 字段的头部会占用 1 个字节
  • 当字符串长度大于 255 个字符时,VARCHAR 字段的头部会占用 2 个字节

因此,存储时除了字符数据本身,VARCHAR 字段的长度信息也是存储空间的一部分。

VARCHAR 字段的最大存储长度

MySQL 中 VARCHAR 字段的最大存储长度为 65535 字节。但是,这个限制并不是单纯指字符数,而是包括了字段头部所占的字节数。因此,我们需要合理计算最大字符数,以避免超出存储限制导致数据截断。

以 UTF-8 编码为例,考虑到:

  • 字段头部可能占用 1 或 2 个字节。
  • 每个字符可能占用 1、3 或 4 个字节。

我们可以推算出,VARCHAR 字段的最大字符数。为了确保安全,假设每个字符都占用 3 个字节(这适用于大多数汉字),并假设字段头部占用了最大字节数(即 3 个字节),可以得出:

  • 65535 字节减去 3 个字节头部空间后剩余 65532 字节。
  • 65535-3=65532(去掉头部最大占用)
  • 65532 / 3 = 21844(应对‘最差’情况全部字符都是占3个字节)
  • 因此,最大字符数大约为 21844 个字符。

这个 21844 的字符数是一个“安全值”,它可以确保在实际使用中不会因为头部字节和字符字节的不确定性导致数据被截断。设置为 21844 个字符,使得 VARCHAR 字段在存储 UTF-8 编码数据时更加安全和可靠。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值