服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|

服务器之家 - 数据库 - Mysql - Mysql varchar大小长度问题介绍

Mysql varchar大小长度问题介绍

2019-11-26 19:51MYSQL教程网 Mysql

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

4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 
5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节 
Mysql4中最大也不过是20个字节,但是Mysql5根据编码不同,存储大小也不同。 

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如何提高MySQL Limit查询性能的方法详解

    如何提高MySQL Limit查询性能的方法详解

    今天小编就为大家分享一篇关于如何提高MySQL Limit查询性能的方法详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起...

    CODETC2212019-06-24
  • Mysqlmysql下修改engine引擎的方法

    mysql下修改engine引擎的方法

    修改mysql的引擎为INNODB,可以使用外键,事务等功能,性能高。 ...

    MYSQL教程网1782019-11-22
  • MysqlMySQL使用集合函数进行查询操作实例详解

    MySQL使用集合函数进行查询操作实例详解

    这篇文章主要介绍了MySQL使用集合函数进行查询操作,结合实例形式详细分析了MySQL使用集合函数进行的运算与查询操作使用技巧,需要的朋友可以参考下...

    程志伟2602019-07-08
  • MysqlMySQL安装详解图文版(V5.5 For Windows)

    MySQL安装详解图文版(V5.5 For Windows)

    这几年一直在用MySQL,并且是Windows+.Net+MySQL的搭配,用MyISAM引擎支持过单表每天千万以上的数据递增,TB级的数据MySQL游刃有余。 ...

    MYSQL教程网1622019-11-25
  • Mysql找到一种不错的从SQLServer转成Mysql数据库的方法

    找到一种不错的从SQLServer转成Mysql数据库的方法

    年初的时候一直在做一个网站MSSQL2000-MySQL5的迁移工作,因为采用了不同的程序系统,所以主要问题在数据的迁移。由于2个系统 数据库 结构差异非常大,不...

    mysql技术网1892019-10-18
  • MysqlMySQL 加密/压缩函数

    MySQL 加密/压缩函数

    在MySQL中,加密和压缩函数返回二进制串。对其中的许多函数而言,结果可能包含任意的字节值,如果想存储这些结果,你应该使用一个具有varbinary或者b...

    mysql教程网2932019-11-04
  • Mysql详解Mysql基础语法的使用

    详解Mysql基础语法的使用

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。这篇文章主要介绍了Mysql基础语法的使用,需要的朋友可以参考下...

    dsn7274552182932019-07-02
  • MysqlMySQL中的运算符使用实例展示

    MySQL中的运算符使用实例展示

    请问,什么是最好的参考文档,我的答案是:真实可行的样例语句。 ...

    mysql教程网3112019-11-12