最近在研究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最大长度_MySQL中的CHAR和VARCHAR到底支持多长?相关推荐

  1. mysql 数值类型 长度_mysql中的数据类型的长度

    位,字节,字 --------------------------------------------------------------- 8位(bit)=1字节(Byte),1024字节=1KB: ...

  2. mysql 联合索引长度_MySQL 中索引的长度的限制

    单列索引的长度的限制 (5.6里面默认不能超过767bytes,5.7不超过3072bytes): 起因是256×3-1=767.这个3是字符最大占用空间(utf8).但是在5.5以后,开始支持4个字 ...

  3. mysql int数据类型长度_mysql中int数据类型长度的问题

    在定义了mysql中int数据类型后,后面填写的长度有什么用呢?下文将对mysql中int数据类型长度进行详细的介绍,希望对您能有所帮助. mysql中int数据类型长度最大为11位,最少为4位,不够 ...

  4. mysql获取当月最后一天_mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天

    mysql获取当月最后一天_mysql中获取本月第一天.本月最后一天.上月第一天.上月最后一天等等 转自: https://blog.csdn.net/min996358312/article/det ...

  5. mysql varchar2多少合适_MySQL中varchar最大长度是多少(仅学习)

    目录 一. varchar存储规则: 二. varchar和char 的区别: ps :被问到一个问题:MySQL中varchar最大长度是多少? 1.限制规则 2.计算例子 3.varchar物理存 ...

  6. Mysql修改字段名和长度_mysql中修改表字段名/字段长度/字段类型详解

    先来看看常用的方法 MySql的简单语法,常用,却不容易记住.当然,这些Sql语法在各数据库中基本通用.下面列出: 1.增加一个字段: alter table user add COLUMN new1 ...

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

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

  8. mysql添加临时索引_mysql 中添加索引的三种方法

    在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以通过不同的应用场景来进行索引的新建,在此列出三种新建索引的方法 mysql 中添加索引的三种方法 1.1 新建表中添加索 ...

  9. mysql中括号的表达_Mysql中数据类型括号中的数字代表的含义

    相信大家不管是看别人的代码,还是自己的代码总会在定义表的数据类型时,会需要在数据类型后面加一个括号,里面写一个参数,例如int(3),smallint(5),char(5)等,但是括号里面的数字到底是 ...

  10. mysql 存储文本数据类型_MYSQL中的五种数据类型

    MYSQL中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型 字符型 VARCHAR VS CHAR VARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要.他们都是用来储存字符串长度 ...

最新文章

  1. XP 风格的可拖动列、可排序、可改变宽度的DataGrid的例子
  2. 加密芯片——3DES算法特点与应用注意事项
  3. lambda函数 java_使用 Java 构建 Lambda 函数 - AWS Lambda
  4. python安装选项_Python PyInstaller安装和使用教程(详解版)
  5. 用 TStringList 模拟 将字符串转换为变量的功能 - 回复 flq_00000 和 外来天客 的问题...
  6. PHP 14:类的实例
  7. 数据库系统概论第五版(第 5 章 数据库完整性)笔记
  8. 联想微型计算机拆装图解,笔记本电脑的拆卸图解
  9. couchbase 报 The Content of this Observable is already released. Subscribe earlier or tune the Couch
  10. 头文件中,#include使用引号“”和尖括号有什么区别?
  11. vue 实现评论回复功能
  12. 微信公众号回复小程序链接
  13. 软件:股票小助手/盯盘小助手!
  14. 红帽Linux自带的光盘刻录,cdrecord -- linux下光盘刻录
  15. [project X] tiny210(s5pv210)上电启动流程(BL0-BL2)
  16. ad中按钮开关的符号_火速收藏!电工最常用电气元件实物图及对应符号
  17. PLC学习笔记(三):PLC结构(2)
  18. 在Windows 11中恢复动态磁贴
  19. 苹果7如何设置手机邮箱服务器,iphone7 126邮箱如何设定发件服务器
  20. 原来我还可以这样活:拆掉思维里的墙

热门文章

  1. 基于C++的采用单链表判断算术表达式的合理性
  2. SVN“Previous operation has not finished; run 'cleanup' if it was interrupted”错误修复方法
  3. 研究自动驾驶技术的算法需要哪些知识?
  4. ROS1 robot path tracking
  5. Java虚拟机知识点【栈帧】
  6. 【Mac】nsurlsessiond 后台下载问题的解决方法
  7. Sql Server 远程过程调用失败
  8. 关于socket中阻塞,非阻塞,同步,异步的概念
  9. SQL Server树型结构数据处理的存储过程
  10. 【学堂在线数据挖掘:理论方法笔记】第一天(3.17)