目录
varchar(N)到底能存多长的数据(65,535 字节)
MySQL中,varchar是最常见的字符串数据类型,它比定长类型char(固定长度的字符串)更节省空间,它仅使用必要的空间,越短的字符串使用越少的空间。
varchar(N)的逻辑意义
从MySQL4.1开始,varchar (N)中的N指的是该字段最多能存储多少个字符(characters),不是字节数。不管是一个中英文字符或者数字、或者一个汉字,都当做一个字符。在4.1之前,N表示的是最大存储的字节数(bytes)。
varchar(N)到底能存多长的数据(65,535 字节)
在 MySQL 中,varchar(N)
的最大值为 65,535 字节。
在 MySQL 中,单行数据总长度(所有字段)的最大大小限制是 64KB(64 × 1024 = 65,536 字节),但实际上可用的最大字节数是 65,535 字节,因为 MySQL 设计时为行的结构和开销预留了一个字节,每一行都有额外的开销(例如,用于存储行的状态或指针等信息),因此实际可用的字节数被限制在 65,535 字节。
varchar物理存储
varchar需要使用一个或两个额外字节记录字符串的长度。
在物理存储上,varchar使用1到2个额外的字节表示实际存储的字符串长度(bytes)。当字符数小于等于255(varchar(N) N <= 255
)时,MySQL只用1个字节来记录,当字符数多于255(varchar(N) N > 255
)时,用2个字节来存长度。
varchar(N)的实际存储空间 = 实际字符数 * 单字符最大字节数 + 长度前缀开销。
长度前缀:
- 如果N <= 255,长度前缀占用1个字节。
- 如果N > 255,长度前缀占用2个字节
字符集为latin1时,一个字符占用一个字节(byte);UTF-8:一个汉字 = 3个字节,英文是一个字节;GBK: 一个汉字 = 2个字节,英文是一个字节。