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

 更新时间:2011年08月15日 01:21:39   作者:  
本文我们主要介绍了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的限制规则的知识就介绍到这里了,希望本次的介绍能够对您有所收获!

相关文章

  • mysql的日期和时间函数

    mysql的日期和时间函数

    mysql的日期和时间函数 这里是一个使用日期函数的例子。
    2010-11-11
  • mysql中全连接full join...on...的用法说明

    mysql中全连接full join...on...的用法说明

    这篇文章主要介绍了mysql中全连接full join...on...的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • MySQL定时全库备份数据库

    MySQL定时全库备份数据库

    数据备份真的很重要, 因为可能有一天数据会被莫名其妙的删掉了,本文主要介绍了MySQL定时备份数据库,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 解决mysql登录错误:''Access denied for user ''root''@''localhost''

    解决mysql登录错误:''Access denied for user ''root''@''localhost''

    这篇文章主要介绍了mysql登录错误:'Access denied for user 'root'@'localhost',本文给出了操作过程及注意事项,需要的朋友可以参考下
    2019-11-11
  • MySQL、Oracle数据库如何查看最大连接数和当前连接数

    MySQL、Oracle数据库如何查看最大连接数和当前连接数

    在使用MySQL、Oracle数据库时了解最大连接数和当前数据库连接数对于优化数据库性能和确保系统稳定性非常重要,这篇文章主要给大家介绍了关于MySQL、Oracle数据库如何查看最大连接数和当前连接数的相关资料,需要的朋友可以参考下
    2024-04-04
  • 升级到MySQL5.7后开发不得不注意的一些坑

    升级到MySQL5.7后开发不得不注意的一些坑

    这篇文章主要给大家介绍了关于升级到MySQL5.7后开发不得不注意的一些坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • 华为云云数据库MySQL的体验流程

    华为云云数据库MySQL的体验流程

    本文主要介绍了MySQL数据库相关知识,华为云云数据库的体验流程和云数据库MySQL的性能测试,感兴趣的小伙伴可以阅读浏览
    2023-03-03
  • mysql 无法连接问题的定位和修复过程分享

    mysql 无法连接问题的定位和修复过程分享

    开发的一款网站防护产品中出现了一个客户端上安装后Mysql每隔一段时间就出现问题,这个问题是客户反馈的,所以需要去复现和定位
    2013-03-03
  • mysql巡检脚本(必看篇)

    mysql巡检脚本(必看篇)

    下面小编就为大家带来一篇mysql巡检脚本(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • MySQL数据库中把int转化varchar引发的慢查询

    MySQL数据库中把int转化varchar引发的慢查询

    这篇文章主要介绍了MySQL数据库中把int转化varchar引发的慢查询 的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07

最新评论