最近在研究MySQL的数据类型,我们知道,选择合适的数据类型和数据长度对MySQL的性能影响是不可忽视的,小字段意味着可以MySQL可以读取更多的记录,从而加快查询速度。

网上该问题的答案有很多版本,还是通过实践得出的结论比较靠谱。

先说结论(MySQL版本5.7.27)

  • CHAR最大255字符,字符集对CHAR没有影响,CHAR()括号内填写最大字符数255
  • VARCHAR最大65535字节,字符集对VARCHAR有影响
    • UTF8字符集,每个字符大小3字节,所以65535/3 = 21845,最大支持21845字符,因此VARCHAR()括号中最大填写21845字符
    • GBK字符集,每个字符大小2字节,所以65535/2 = 32767.5,最大支持32767字符,因此VARCHAR()括号中最大填写32767字符

验证过程

CHAR

UTF8字符集(1个字符占用3个字节)

CREATE TABLE `test`.`demo`  (
`id` int(0) UNSIGNED NULL AUTO_INCREMENT,
`title` char(256) NULL,
PRIMARY KEY (`id`)
) CHARACTER SET = utf8 COLLATE = utf8_general_ci;

MySQL提示错误

1074 - Column length too big for column 'title' (max = 255); use BLOB or TEXT instead

GBK字符集(1个字符占用2个字节)

CREATE TABLE `test`.`demo`  (
`id` int(0) UNSIGNED NULL AUTO_INCREMENT,
`title` char(256) NULL,
PRIMARY KEY (`id`)
) CHARACTER SET = gbk COLLATE = gbk_chinese_ci;

MySQL提示错误

1074 - Column length too big for column 'title' (max = 255); use BLOB or TEXT instead

结论:CHAR最大长度和字符集没有关系,因此CHAR()括号内填写字符大小,最终数据的字节大小随着字符集不同而不同

VARCHAR

UTF8字符集(1个字符占用3个字节)

CREATE TABLE `test`.`demo`  (
`id` int(0) UNSIGNED NULL AUTO_INCREMENT,
`title` varchar(65535) NULL,
PRIMARY KEY (`id`)
) CHARACTER SET = utf8 COLLATE = utf8_general_ci;

MySQL提示错误

1074 - Column length too big for column 'title' (max = 21845); use BLOB or TEXT instead

MySQL提示的最大长度为21845,通过UTF8字符集的大小可知VARCHAR()括号中指的是字符大小。

UTF8MB4字符集(1个字符占用4个字节)

CREATE TABLE `test`.`demo`  (
`id` int(0) UNSIGNED NULL AUTO_INCREMENT,
`title` varchar(65535) NULL,
PRIMARY KEY (`id`)
) CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

MySQL提示错误

1074 - Column length too big for column 'title' (max = 16383); use BLOB or TEXT instead

MySQL提示的最大长度为16383,通过UTF8MB4字符集大小可知VARCHAR()括号中指的是字符大小。

MySQL中的CHAR和VARCHAR到底支持多长?的更多相关文章

  1. Mysql中的char与varchar length()与char_length()

    在mysql中,char和varchar都表示字符串类型.但他们存储和检索数据的方式并不相同. 在表结构定义中声明char和varchar类型时,必须指定字符串的长度.也就是该列所能存储多少个字符(不 ...

  2. MySQL中的char与varchar详解

    mysql中char与varchar的区别: char:定长,效率高,一般用于固定长度的表单提交数据存储  :例如:身份证号,手机号,电话,密码等 varchar:不定长,效率偏低 1.varchar ...

  3. MySQL中有关char、varchar、int、tinyint、decimal

    char.varchar属于字符串类型 1.char属于定长,能确切的知道列值的长度,也就是有多少个字符.当指定char(5)时,表示只能存5个字符,如5个英文‘a’,5个汉字‘我’,5个符号‘&am ...

  4. Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)

    刚才有幸看了下 nvarchar(n)和varchar(n),感觉以前的认知有误. nvarchar(n):n指的是字符个数,范围是1-4000,存储的是可变长度的Unicode字符数据. 按字符存储 ...

  5. mysql中数据类型后面的数字到底是什么?

    1.在mysql新建数据表的时候我们在数据类型后面经常会见到,或者添加数据,那么数据类型后面的数字到底是什么呢?之前以为int(3) 就代表最长数据就是3个字节,其实不是!! 我向num字段中插入: ...

  6. 数据库设计(字段)中的char、varchar、text和nchar、nvarchar、ntext的区别

    char.varchar.text和nchar.nvarchar.ntext的区别 1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数 ...

  7. MySQL数据类型操作(char与varchar)

    目录 一:MySQL数据类型之整型 1.整型 2.验证不同类型的int是否会空出一个存储正负号 3.增加约束条件 去除正负号(unsigned) 二:浮点型 1.浮点型 2.验证浮点型精确度 三:字符 ...

  8. MySQL中採用类型varchar(20)和varchar(255)对性能上的影响

    1.MySQL建立索引时假设没有限制索引的大小,索引长度会默认採用的该字段的长度.也就是说varchar(20)和varchar(255)相应的索引长度分别为20*3(utf-8)(+2+1),255 ...

  9. MySQL int、char、varchar 最大值是多少?

    1.int(len) (1)max(len) = 255 (2)存储范围: 带符号整数:-2147483648-2147483647. 无符号(unsigned)整数:0-4294967295. 2. ...

随机推荐

  1. HZOJ trade

    强烈谴责$skyh$的没$\Huge 脸$行为. 很经典的可反悔贪心,然而我一直以为是sbdp还一直想着怎么优化…… 正常的贪心肯定是不对的. 但是由于A-C=A-B+B-C, 所以用一个小根堆维护, ...

  2. 利用IDEA构建springboot应用-构建好SpringBoot + SSM 框架

    一. 创建项目 选择 Spring Initiallizr 添加最基本的几个依赖 Web,MySQL,MyBatis,其他需求可以后续再添加 ; 数据库选择了 MySQL 二. 配置数据源 数据源中存 ...

  3. SDUT-2119_数据结构实验之链表四:有序链表的归并

    数据结构实验之链表四:有序链表的归并 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 分别输入两个有序的整数序列(分别包 ...

  4. 洛谷P1546 最短网络 Agri-Net(Prim堆优化)

    #include<bits/stdc++.h> using namespace std; ; const int INF=0x3f3f3f3f; inline void read(int ...

  5. Python xrange() 函数

    描述 xrange() 函数用法与 range 完全相同,所不同的是生成的不是一个数组,而是一个生成器. 语法 xrange 语法: xrange(stop) xrange(start, stop[, ...

  6. meta标签、常用的文字类标签及其区别

    常用的文字类基本标签 段落:p标题文字 :h1~h6超链接:a,必须属性href,后跟跳转地址图片:img,必须属性src,后跟图片地址字体斜体:em.i 文字加粗:b.strong文字下划线:u文字 ...

  7. HTML--简单的注册网页

    利用表格,渐变色 <body background="未标题-2.jpg"> <table align="center" border=&qu ...

  8. H3C MP-Group方式配置PPP MP

  9. Math.abs( x )

    Math.abs( x ) 下面是参数的详细信息: x : 一个数字 返回值: 返回一个数字的绝对值 <html> <head> <title>JavaScript ...

  10. C#将可编译为本地机器码

    微软宣布了.net native的开发者预览版,详见这里. 这是一个大家期待了很多年的特性.每年在技术论坛上都有无数的人问,C#能否编译成本地机器码. 有了这个特性之后,更多开发商会开始选择C#来开发 ...