MySQL数据库中varchar的限制规则

数据库 MySQL
本文我们主要介绍了MySQL数据库中varchar的限制规则,并以一个实际的例子对限制规则进行了说明,希望能够对您有所帮助。

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

1、限制规则

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

a)存储限制

varchar字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此***长度不能超过65535。

b)编码长度限制

字符类型若为gbk,每个字符最多占2个字节,***长度不能超过32766;

字符类型若为utf8,每个字符最多占3个字节,***长度不能超过21845。

若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。

c)行长度限制

导致实际应用中varchar长度限制的是一个行定义的长度。MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示ERROR1118(42000):Rowsizetoolarge.Themaximumrowsizefortheusedtabletype,notcountingBLOBs,is65535.YouhavetochangesomecolumnstoTEXTorBLOBs。

2、计算例子

举两个例说明一下实际长度的计算。

a)若一个表只有一个varchar类型,如定义为createtablet4(cvarchar(N))charset=gbk;则此处N的***值为(65535-1-2)/2=32766。

减1的原因是实际行存储从第二个字节开始’;

减2的原因是varchar头部的2个字节表示长度;

除2的原因是字符编码是gbk。

b)若一个表定义为createtablet4(cint,c2char(30),c3varchar(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数据库中varchar的限制规则的知识就介绍到这里了,希望本次的介绍能够对您有所收获!

【编辑推荐】

  1. MySQL简单操作之用select查询表中的记录
  2. MySQL简单操作之altertable改变表的结构
  3. 六条比较有用的MySQL数据库操作的SQL语句
  4. 利用SSAS创建多维数据库时的问题总结及优化方案
  5. MySQL简单操作之用update和delete来修改和删除数据
责任编辑:赵鹏 来源: 追风刀·丁奇
相关推荐

2011-04-27 09:25:13

MySQL字符型数据

2010-07-05 11:20:53

2018-05-16 14:24:53

2010-10-13 11:59:50

MySQL表命名

2011-03-28 13:25:27

MySQL数据库哈希加密

2010-05-20 14:25:25

2021-04-23 10:21:26

人工智能人工智能技术AI

2010-04-15 12:43:06

Oracle数据库

2010-07-01 11:14:36

SQL Server

2010-06-01 11:28:43

MySQL数据库

2018-07-30 15:00:05

数据库MySQLJOIN

2023-05-29 15:23:37

MySQL数据库函数

2011-04-07 09:06:27

MySQL数据库密码

2012-04-12 09:09:41

数据库

2018-09-11 17:13:23

MySQ数据库重复记录

2011-03-08 08:49:55

MySQL优化单机

2011-03-30 14:08:27

MySQL数据库删除恢复

2011-05-13 09:42:21

2023-09-14 23:05:57

​ ​MySQL数据库

2023-09-13 14:52:11

MySQL数据库
点赞
收藏

51CTO技术栈公众号