4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节
1、限制规则

a) 存储限制
需要额外地在长度列表上存放实际的字符长度:小于255为1个字节,大于255则要2个字节

b) 编码限制
gbk:每个字符最多占用2个字节
utf8:每个字符最多占用3个字节

c) 长度限制
MySQL定义行的长度不能超过65535,这个限制了列的数目,比如char(255) utf8
那么列的数目最多有65535/(255*3)=85,列的数目可以从这里得到依据

行长度计算公式如下:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
① 对于MyISAM,需要额外1个位来记录值是否为NULL;对于InnoDB,没有区别
② 对于row_format为fixed,delete_flag为1;对于row_format=dynamic,delete_flag为0

根据这个公式,我们便能够解答开头N的最大值:(65535-1-2)/3
减1是因为实际存储从第2个字节开始
减2则因为要在列表长度存储实际字符长度
除3是因为utf8编码限制

再来一道:
create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;
N的最大值:(65535-1-2-4-30*3)/3

则此处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”了

出处:https://blog.csdn.net/u012048106/article/details/23173911

VARCHAR(N)类型,utf8编码,则N最大值为多少,n表示什么?的更多相关文章

  1. MySQL定义char和varchar类型,utf8编码,则最大值为多少?

    有道面试题:若一张表中只有一个字段VARCHAR(N)类型,utf8编码,则N最大值为多少?先明白计算的一些规则限制 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只 ...

  2. MySQL对JSON类型UTF-8编码导致中文乱码探讨

    前言 继上文发表之后,结合评论意见并亲自验证最终发现是编码的问题,但是对于字符编码还是有点不解,于是乎,有了本文,我们来学习字符编码,在学习的过程中,我发现对于MySQL中JSON类型的编码导致数据中 ...

  3. 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)

    背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...

  4. ASCII、Unicode、UTF8编码类型的理解

    一.ASCII码        在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte) ...

  5. 类型:NodeJs;问题:默认IE的编码为utf8;结果:IE不能自动选择UTF-8编码解决办法

    在Windows操作系统上使用IE作为浏览器时.常常会发生这样的问题:在浏览使用UTF-8编码的网页时,浏览器无法自动侦测(即没有设定“自动选 择”编码格式时)该页面所用的编码.即使网页已经声明过编码 ...

  6. Java-数据类型与编码(ASCII、Unicode 和 UTF-8)

    机械硬盘硬件结构(了解)https://diy.pconline.com.cn/cpu/study_cpu/1009/2215404_all.html 一.数据储存单位 1.bit(位) https: ...

  7. 关于 MySQL UTF8 编码下生僻字符插入失败/假死问题的分析

    原文:http://my.oschina.net/leejun2005/blog/343353 目录[-] 1.问题:mysql 遇到某些中文插入异常 2.原因:此 utf8 非彼 utf8 3.解决 ...

  8. python利用utf-8编码判断中文英文字符(转)

    下面这个小工具包含了判断unicode是否是汉字.数字.英文或者其他字符,全角符号转半角符号,unicode字符串归一化等工作. #!/usr/bin/env python # -*- coding: ...

  9. java中文GBK和UTF-8编码转换乱码的分析

    原文:http://blog.csdn.net/54powerman/article/details/77575656 作者:54powerman 一直以为,java中任意unicode字符串,可以使 ...

随机推荐

  1. GNU C的定义长度为0的数组

    在标准C和C++中,长度为0的数组是被禁止使用的.不过在GNU C中,存在一个非常奇怪的用法,那就是长度为0的数组,比如Array[0];很多人可能觉得不可思议,长度为0的数组是没有什么意义的,不过在 ...

  2. Python扩展库2—matplotlib

    1 载入matplotli的绘图模块,并重命名为plt import matplotlib.pyplot as plt 2 折线图 import matplotlib.pyplot as plt im ...

  3. 1--Jmeter4.0连接Oracle数据库

    一.Jmeter要连接oracle数据库,就必须复制JDBC驱动jar包文件ojdbc5.jar或者ojdbc6.jar到Jmeter的lib目录下 路径:oracle安装目录\jdbc\lib 二. ...

  4. JAVA Collections.shuffle打乱列表

    在JAVA中如果想打乱LIST的顺序可以调用Collections.shuffle()或者Collections.shuffle(List<?> list, Random rnd)方法. ...

  5. SQL注入之Sqli-labs系列第十三关(基于单引号POST的报错注入)

    开始挑战第十三关(Double Injection- String- with twist) 访问地址,输入报错语句 '  ''  ')  ") - 等使其报错 分析报错信息 很明显是需要采 ...

  6. websocket js 代码样例

    function StartWebSocket(wsUri) { websocket = new WebSocket(wsUri); websocket.onopen = function(evt) ...

  7. PHPweb应用攻击总结(转)

    XSS跨站脚本 概念:恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的. 危害: 盗取用户COOKIE信息. 跳转 ...

  8. 将mysql的表导出为excel

     1.在表上右键,选择Table Data Export Wizard,选择想要导出的字段,点击next 2.选择导出文件的路径->csv格式->next 3.点击next 4.打开刚才导 ...

  9. select的width和input的width

    select的width包括了border,而input不包括

  10. Atcode ABC105-C:Base -2 Number

    C - Base -2 Number Time Limit: 2 sec / Memory Limit: 1024 MB Score : 300300 points Problem Statement ...