当前位置:主页 > mysql教程 > Mysql varchar大小长度问题介绍

关于Mysql的varchar长度问题

发布:2020-02-21 15:54:24 87


本站精选了一篇mysql 相关的编程文章,网友戌雅逸根据主题投稿了本篇教程内容,涉及到Mysql、varchar、Mysql varchar大小长度问题介绍相关内容,已被300网友关注,涉猎到的知识点内容可以在下方电子书获得。

Mysql 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 ”了。

参考资料

相关文章

  • php连接MySQL的两种方式区别

    发布:2020-03-20

    这篇文章主要介绍了php连接MySQL的两种方式对比,一种是原生的链接方式另外一种是PDO方式,附上示例,推荐给大家,有需要的小伙伴可以参考下


  • mysql图文安装详细步骤细节

    发布:2020-01-17

    这篇文章主要为大家分享了一份超详细的mysql图文安装教程,安装步骤有详细的说明,,需要的朋友可以参考下


  • MySQL如何批量替换字段中的字符串

    发布:2020-03-17

    批量替换 MySQL 指定字段中的字符串是数据库应用中很常见的需求,但是有很多初学者在遇到这种需求时,通常都是用脚本来实现;其实,MySQL 内置的有批量替换语法,效率也会高很多;想了解


  • mysql缓冲和缓存设置详细步骤

    发布:2020-01-06

    本文主要给大家讲解的是mysql优化过程中比较重要的2个参数缓冲和缓存的设置,希望大家能够喜欢


  • windows server2014 安装 Mysql Applying Security出错的简单解决方法

    发布:2019-09-10

    这篇文章给大家介绍了windows server2014 安装 Mysql Applying Security出错的完美解决方法,造成这种问题的主要原因是因为安装一遍之后没有卸载干净,要解决这个问题需要注意以下几点,具体解决方


  • MySQL双向备份的实例代码和步骤

    发布:2020-01-01

    这篇文章主要介绍了MySQL 双向备份的实现方法,即两个 MySQL 服务都是 Master,其中任意一个服务又是另一个服务的 Slave,感兴趣的可以了解一下


  • 详解mysql索引的增加和删除

    发布:2020-03-12

    下面小编就为大家带来一篇mysql增加和删除索引的相关操作。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧


  • Mysql中LAST_INSERT_ID()函数使用方法总结

    发布:2019-07-29

    从名字可以看出,LAST_INSERT_ID即为最后插入的ID值,有了这个实用的函数,我们可以实现很多问题,下面我们就来深入探讨下。


网友讨论