`
丁林.tb
  • 浏览: 797213 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MySQL中varchar最大长度是多少?

阅读更多

    被问到一个问题:MySQLvarchar最大长度是多少?这不是一个固定的数字。本文简要说明一下限制规则。

1、限制规则

字段的限制在字段定义的时候有以下规则:

 

a)                  存储限制

varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用12个字节表示实际长度(长度超过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类型的c4个字节;

30*3的原因是char(30)占用90个字节,编码是utf8

 

       如果被varchar超过上述的b规则,被强转成text类型,则每个字段占用定义长度为11字节,当然这已经不是“varchar”了。

9
2
分享到:
评论
8 楼 swkiller 2014-02-12  
65535-1-2=65332。为什么-1,因为表中varchar字段的定义default NULL,由于是default null,要占用一个额外的字节存储标识。如果NOT NULL,最大可以存储65533 bytes的数据。
大神pythian的解释 http://www.pythian.com/blog/text-vs-varchar/。
你说“-1的原因是每个记录的第一个byte固定以0xfe为开头”,有点不是很理解。
7 楼 027xiatian 2013-01-27  
5.1,5.5 varchar(N)中这个N指字符数
楼主测试的是很老的版本吧?
6 楼 aweber 2012-05-03  
aweber 写道
一个行的定义长度不能超过65535, 那么如果有text类型的字段, 算多少长度呢?

我刚才自己测试了一下, text和blob类型的字段都算4个位置。
5 楼 aweber 2012-05-03  
一个行的定义长度不能超过65535, 那么如果有text类型的字段, 算多少长度呢?
4 楼 丁林.tb 2011-07-13  
javantsky 写道
javantsky 写道
CREATE TABLE `t` (                  
          `var` varchar(21844) default NULL  
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8

这个也是可以建立的,怎么解释utf8的最大长度?

我看出错了你的第二个表列的个数,不好意思

但是“-1”是为什么呢,你在哪里看到的,是官方说法吗?


官方没有这公式的, -1的原因是每个记录的第一个byte固定以0xfe为开头
3 楼 javantsky 2011-07-07  
javantsky 写道
CREATE TABLE `t` (                  
          `var` varchar(21844) default NULL  
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8

这个也是可以建立的,怎么解释utf8的最大长度?

我看出错了你的第二个表列的个数,不好意思

但是“-1”是为什么呢,你在哪里看到的,是官方说法吗?
2 楼 javantsky 2011-07-07  
javantsky 写道
CREATE TABLE `t` (                  
          `var` varchar(21844) default NULL  
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8

这个也是可以建立的,怎么解释utf8的最大长度?

我用的是mysql5.1
1 楼 javantsky 2011-07-07  
CREATE TABLE `t` (                  
          `var` varchar(21844) default NULL  
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8

这个也是可以建立的,怎么解释utf8的最大长度?

相关推荐

    Mysql中varchar长度设置方法

    在MySQL 5.1及以上版本中,`VARCHAR`的最大长度为65,535字节,但这并不意味着你可以直接存储65,535个字符。由于长度前缀可能会占用1到2个字节,实际的最大字符数会略小于65,535。对于UTF-8编码,这意味着最大字符数...

    ASP技术常遇问题解答-MYSQL各字段的长度是多少?.zip

    下面我们将详细探讨MySQL中常见字段类型及其最大长度。 MySQL数据库支持多种数据类型,如数字类型(INT、FLOAT、DECIMAL等)、字符串类型(CHAR、VARCHAR、TEXT等)、日期和时间类型(DATE、TIME、DATETIME等)以及...

    mysql VARCHAR的最大长度到底是多少

    在MySQL中,VARCHAR长度是通过一个或两个字节来表示的,具体取决于列的最大长度: - 如果VARCHAR长度小于256,则只需要一个字节来存储长度信息。 - 如果长度大于255且小于65,536(2^16),则需要两个字节来存储长度...

    MySQL动态修改varchar长度的方法

    4. 在MySQL 5.0.45版本(使用`UTF-8`编码)中,`VARCHAR`字段的最大长度被限制为21785个字符,因为65535字节减去2字节的长度前缀,再除以3(UTF-8编码的平均字节数)等于21785。 5. 虽然`VARCHAR`在存储时会去除...

    Mysql varchar大小长度问题介绍

    MySQL中的VARCHAR类型是一种可变长度的字符串数据类型,它在存储空间上相比固定长度的CHAR类型更为节省。本文将深入探讨VARCHAR类型的大小长度问题及其在不同版本和编码下的限制。 首先,VARCHAR字段的长度限制主要...

    MySQL数据库varchar的限制规则说明

    MySQL数据库中varchar最大长度是多少?其实这不是一个固定的数字,varchar的长度是有限制规则的。本文我们就来介绍一下MySQL数据库中varchar的限制规则,并以一个实际的例子对限制规则进行了说明,接下来就让我们一...

    对比MySQL中int、char以及varchar的性能

    总的来说,MySQL中的int、char和varchar在性能上的差异并非显著到足以成为决定性因素。开发者应根据实际需求,如数据的类型、大小、预期的增长、是否需要索引以及对可读性和可维护性的要求,来综合考虑选择哪种数据...

    char和varchar在mysql中的效率怎样.docx

    在MySQL数据库中,`CHAR`和`VARCHAR`是两种常见的字符串数据类型,它们在存储和处理数据时具有不同的效率特点。理解这两种类型的差异对于优化数据库性能至关重要。 `CHAR`是一种固定长度的数据类型,这意味着无论...

    探究MySQL中varchar的定义长度

    在MySQL数据库中,`VARCHAR` 是一种用于存储可变长度字符串的数据类型。它与固定长度的`CHAR`数据类型不同,`VARCHAR`可以根据存储的数据自动调整长度,从而节省存储空间。然而,`VARCHAR`的定义长度并不是一个直观...

    MySQL中VARCHAR与CHAR格式数据的区别

    在MySQL数据库中,CHAR和VARCHAR是两种常见的字符串数据类型,它们在存储和处理方式上有着显著的区别,这对于数据库设计和性能优化至关重要。 首先,CHAR是一种固定长度的数据类型。这意味着无论你存储的实际数据有...

    GP数据库表结构转mysql库、oracle库 varchar类型字段长度批量处理excel_MYSQL_oracle_数据库

    对于varchar字段,可能需要在转换前对源数据进行分析,确定实际的最大长度,然后在MySQL中设置合适的varchar长度,以平衡存储效率和数据完整性。 文件“mpp数据库长度转换.xls”很可能包含了一个表格,列出了源...

    php判断输入不超过mysql的varchar字段的长度范围

    在开发过程中,处理数据库的输入验证是一项重要的工作,尤其是针对MySQL数据库中的varchar类型字段,我们需要确保输入的数据长度不会超过字段定义的限制。本文将详细讨论如何使用PHP判断输入长度是否不超过MySQL中...

    MYSQL中 char 和 varchar的区别

    当要存储的字符超过CHAR/VARCHAR指定的最大长度。在sql mode 没开启的时候是截断要存储的字串,只存储前30位 CHAR列中的值是定长的字符串。长度可以指定为0到255个字符(例如utf8mb4: 0-255*4个字节)之间的值当使用...

    浅析Oracle中char和varchar2的区别 电脑资料.docx

    首先,char 是定长的字符串类型,例如 char(10) 表示这个字段的长度是 10 个字符,如果我们存储的数据少于 10 个字符,剩下的空间将被空格填充,而 varchar2 则不同,varchar2(10) 只是表示这个字段的最大长度是 10 ...

    varChar和Char之间的区别?

    在数据库管理领域,尤其是MySQL这样的关系型数据库系统中,数据类型的选择对于数据存储效率和查询性能至关重要。`char`和`varchar`是两种常见的字符数据类型,它们在处理字符串数据时有着显著的区别。 首先,`char`...

    MySQL数据类型varchar详解

    MySQL中的`VARCHAR`数据类型是用于存储可变长度的字符串数据的,它的主要特点是只存储必要的数据量,节省存储空间。在MySQL 4.1之后,`VARCHAR(N)`中的`N`代表字段最多能存储的字符数,而非字节数。无论是英文、数字...

Global site tag (gtag.js) - Google Analytics