被问到一个问题:MySQL中varchar最大长度是多少?这不是一个固定的数字。本文简要说明一下限制规则。
1、限制规则
字段的限制在字段定义的时候有以下规则:
a) 存储限制
varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。
b) 编码长度限制
字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
c) 行长度限制
导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。
2、计算例子
举两个例说明一下实际长度的计算。
a) 若一个表只有一个varchar类型,如定义为
create table t4(c varchar(N)) charset=gbk;
则此处N的最大值为(65535-1-2)/2= 32766。
减1的原因是实际行存储从第二个字节开始’;
减2的原因是varchar头部的2个字节表示长度;
除2的原因是字符编码是gbk。
b) 若一个表定义为
create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;
则此处N的最大值为 (65535-1-2-4-30*3)/3=21812
减1和减2与上例相同;
减4的原因是int类型的c占4个字节;
减30*3的原因是char(30)占用90个字节,编码是utf8。
如果被varchar超过上述的b规则,被强转成text类型,则每个字段占用定义长度为11字节,当然这已经不是“varchar”了。
分享到:
相关推荐
在MySQL 5.1及以上版本中,`VARCHAR`的最大长度为65,535字节,但这并不意味着你可以直接存储65,535个字符。由于长度前缀可能会占用1到2个字节,实际的最大字符数会略小于65,535。对于UTF-8编码,这意味着最大字符数...
下面我们将详细探讨MySQL中常见字段类型及其最大长度。 MySQL数据库支持多种数据类型,如数字类型(INT、FLOAT、DECIMAL等)、字符串类型(CHAR、VARCHAR、TEXT等)、日期和时间类型(DATE、TIME、DATETIME等)以及...
在MySQL中,VARCHAR长度是通过一个或两个字节来表示的,具体取决于列的最大长度: - 如果VARCHAR长度小于256,则只需要一个字节来存储长度信息。 - 如果长度大于255且小于65,536(2^16),则需要两个字节来存储长度...
4. 在MySQL 5.0.45版本(使用`UTF-8`编码)中,`VARCHAR`字段的最大长度被限制为21785个字符,因为65535字节减去2字节的长度前缀,再除以3(UTF-8编码的平均字节数)等于21785。 5. 虽然`VARCHAR`在存储时会去除...
MySQL中的VARCHAR类型是一种可变长度的字符串数据类型,它在存储空间上相比固定长度的CHAR类型更为节省。本文将深入探讨VARCHAR类型的大小长度问题及其在不同版本和编码下的限制。 首先,VARCHAR字段的长度限制主要...
MySQL数据库中varchar最大长度是多少?其实这不是一个固定的数字,varchar的长度是有限制规则的。本文我们就来介绍一下MySQL数据库中varchar的限制规则,并以一个实际的例子对限制规则进行了说明,接下来就让我们一...
总的来说,MySQL中的int、char和varchar在性能上的差异并非显著到足以成为决定性因素。开发者应根据实际需求,如数据的类型、大小、预期的增长、是否需要索引以及对可读性和可维护性的要求,来综合考虑选择哪种数据...
在MySQL数据库中,`CHAR`和`VARCHAR`是两种常见的字符串数据类型,它们在存储和处理数据时具有不同的效率特点。理解这两种类型的差异对于优化数据库性能至关重要。 `CHAR`是一种固定长度的数据类型,这意味着无论...
在MySQL数据库中,`VARCHAR` 是一种用于存储可变长度字符串的数据类型。它与固定长度的`CHAR`数据类型不同,`VARCHAR`可以根据存储的数据自动调整长度,从而节省存储空间。然而,`VARCHAR`的定义长度并不是一个直观...
在MySQL数据库中,CHAR和VARCHAR是两种常见的字符串数据类型,它们在存储和处理方式上有着显著的区别,这对于数据库设计和性能优化至关重要。 首先,CHAR是一种固定长度的数据类型。这意味着无论你存储的实际数据有...
对于varchar字段,可能需要在转换前对源数据进行分析,确定实际的最大长度,然后在MySQL中设置合适的varchar长度,以平衡存储效率和数据完整性。 文件“mpp数据库长度转换.xls”很可能包含了一个表格,列出了源...
在开发过程中,处理数据库的输入验证是一项重要的工作,尤其是针对MySQL数据库中的varchar类型字段,我们需要确保输入的数据长度不会超过字段定义的限制。本文将详细讨论如何使用PHP判断输入长度是否不超过MySQL中...
当要存储的字符超过CHAR/VARCHAR指定的最大长度。在sql mode 没开启的时候是截断要存储的字串,只存储前30位 CHAR列中的值是定长的字符串。长度可以指定为0到255个字符(例如utf8mb4: 0-255*4个字节)之间的值当使用...
首先,char 是定长的字符串类型,例如 char(10) 表示这个字段的长度是 10 个字符,如果我们存储的数据少于 10 个字符,剩下的空间将被空格填充,而 varchar2 则不同,varchar2(10) 只是表示这个字段的最大长度是 10 ...
在数据库管理领域,尤其是MySQL这样的关系型数据库系统中,数据类型的选择对于数据存储效率和查询性能至关重要。`char`和`varchar`是两种常见的字符数据类型,它们在处理字符串数据时有着显著的区别。 首先,`char`...
MySQL中的`VARCHAR`数据类型是用于存储可变长度的字符串数据的,它的主要特点是只存储必要的数据量,节省存储空间。在MySQL 4.1之后,`VARCHAR(N)`中的`N`代表字段最多能存储的字符数,而非字节数。无论是英文、数字...