如果某一项中设置的是varchar(50)

那么对英文当然是50

那么对中文呢

utf-8的中文占3个字节

那么,这个varchar(50)是不是只能存16个汉字了?

不是这样的,mysql低版本之前是这样的,但是5.0以后就不是了

mysql varchar(50)  不管中文 还是英文 都是存50个的,但是一个表中所有varchar字段的总长度跟编码有关,如果是utf-8,那么大概65535/3,如果是gbk,那么大概65535/2.

MySQL5的文档,其中对varchar字段类型这样描述:varchar(m) 变长字符串。M 表示最大列长度。M的范围是0到65,535。(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,最大有效长度是65,532字节)。

为何会这般变换?真是感觉MySQL的手册做的太不友好了,因为你要仔细的继续往下读才会发现这段描述:MySQL 5.1遵从标准SQL规范,并且不删除VARCHAR值的尾部空格。VARCHAR保存时用一个字节或两个字节长的前缀+数据。如果VARCHAR列声明的长度大于255,长度前缀是两个字节。

MySQL中varchar最大长度是多少?这不是一个固定的数字。本文简要说明一下限制规则。

1、限制规则

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

a)

存储限制

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

b)

编码长度限制

字符类型若为gbk,每个字符最多占2个字节

字符类型若为utf8,每个字符最多占3个字节

若定义的时候超过上述限制,则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 varchar 不设长度_Mysql varchar长度问题相关推荐

  1. mysql字段最大长度_MySQL VARCHAR字段最大长度到底是多少

    varchar(n),n表示什么? MySQL5.0.3之前varchar(n)这里的n表示字节数 MySQL5.0.3之后varchar(n)这里的n表示字符数,比如varchar(200),不管是 ...

  2. mysql utf-8长度_MySQL VARCHAR长度和UTF-8?mysql

    mysql5.0.3及以前版本varchar类型最大长度是255字符, 之后版本理论上长度可取值范围是1到65535字节,但实际上不可能取到这么大的值,原因是65535字节是mysql1行数据占用的长 ...

  3. mysql varchar 默认长度_MySQL VARCHAR类型字段到底可以定义多长

    MySQL 单行行长最大是65535,不包含TEXT,BLOB类型. varchar 长度小于255时,需要额外使用1字节存储长度,大于255时,需要 额外使用2字节存储长度. varchar 栏位如 ...

  4. mysql vchar 最大长度_mysql VARCHAR的最大长度到底是多少

    以前一直都认为有两个字节来记录长度(长度小也可以用一个字节记录),所以这个问题当时觉得就挺无聊的 不过后来群里有人给了解释,突然才发现原来事情不是这么简单 MYSQL COMPACT格式,每条记录有一 ...

  5. mysql数据类型默认长度_mysql数据类型长度

    1个字节= 8位  tinyint 为一个字节  2的8次方= 256 所以最多存储到256 日期和时间数据类型 MySQL数据类型 含义 date 3字节,日期,格式:2014-09-18 time ...

  6. mysql的varchar最大值是多少_MySQL varchar计算:求列的数额和计算N的最大值

    mysql varchar计算:求列的数目和计算N的最大值 有道面试题:若一张表中只有一个字段VARCHAR(N)类型,utf8编码,则N最大值为多少? 先明白计算的一些规则限制 ① 存储限制 需要额 ...

  7. mysql 前n个最大值_MySQL varchar计算:求列的数目和计算N的最大值

    MySQL varchar计算:求列的数目和计算N的最大值 有道面试题:若一张表中只有一个字段VARCHAR(N)类型,utf8编码,则N最大值为多少? 先明白计算的一些规则限制 ① 存储限制 需要额 ...

  8. mysql in最大长度_mysql In长度的问题?

    不记得有代替in的语句,可能也是因为我不太关注sql导致水平较低哈. 这种问题通常是由于无限分类表本身的设计问题导致的,例如只有id, parent_id两个字段,所以只要in了,如果无限分类表包含 ...

  9. mysql varchar长度影响速度_MySQL VARCHAR大小的性能影响

    您必须实现使用CHAR与VARCHAR的权衡 使用CHAR字段,您分配的内容正是您所获得的.例如,无论您在字段中放置的字符如何,CHAR(15)都会分配和存储15个字节.字符串操作简单明了,因为数据字 ...

  10. Mysql UTF8 varchar与Oracle ZHS16GBK varchar2同长度下存汉字的差异

    目录 1简介... 1 2 准备... 1 2.1 环境说明... 1 3 安装... 2 4 配置... 2 5 使用... 3 5.1 验证实验... 3 5.2 问题分析... 5 6 延展.. ...

最新文章

  1. Rosalind: 兔子与递归
  2. CVPR2020中关于3D点云分割
  3. SDR、DDR、QDR存储器的比较
  4. vw实现移动端自适应页面
  5. x9此计算机上没有hasp_为什么我在别人电脑上好装mastercam9,在自己电脑装不成功,它没有出现什么HASP驱动安装的提示,为什么...
  6. linux下安装python(安装python 3.6稳定版成功亲测)
  7. AI视觉在教育场景中的创新应用
  8. 中高级数论 [欧拉函数线性筛,二次剩余]
  9. 10-礼帽与黑帽操作
  10. js数组依据下标删除元素
  11. 来电通java版_还在玩JAVA版《我的世界》?教你怎么转换存档玩光追!
  12. Hibernate HQL详解
  13. 【转】js如何准确获取当前页面url网址信息
  14. 使用python实现一个文件搜索功能,类似于Everything功能
  15. python为什么胶水语言_为什么称python为胶水语言
  16. 项目采购管理和干系人管理
  17. pandas学习-task2
  18. 甘超波:NLP抽离与结合
  19. h5页面使用html2canvas实现分享海报
  20. 华为服务器虚拟机登录密码,虚拟机登录密码忘记了怎么办

热门文章

  1. 关于php 调用接口 微信云支付 HmacSha256 加密 request_content 生成 authen_code
  2. R语言连续变量正态性检验
  3. 电流、电压、功率的计算方式
  4. 【黄啊码】关于vue的PC端和手机端框架
  5. 计算机设备名称设备型号含义,设备名称品牌型号资料.doc
  6. python 校验邮箱格式、手机号格式
  7. 软件测试记录包括哪些,bug记录里通常包括哪些内容?
  8. java jfif,win10保存图片成了jfif格式怎么办?
  9. word中图片转html失真,word中全部图片如何原样保存到本地保持不失真
  10. python中tab的用法_pyhton 使用tab键自动补全