MySQL中的CHAR和VARCHAR到底支持多长?
最近在研究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到底支持多长?的更多相关文章
- Mysql中的char与varchar length()与char_length()
在mysql中,char和varchar都表示字符串类型.但他们存储和检索数据的方式并不相同. 在表结构定义中声明char和varchar类型时,必须指定字符串的长度.也就是该列所能存储多少个字符(不 ...
- MySQL中的char与varchar详解
mysql中char与varchar的区别: char:定长,效率高,一般用于固定长度的表单提交数据存储 :例如:身份证号,手机号,电话,密码等 varchar:不定长,效率偏低 1.varchar ...
- MySQL中有关char、varchar、int、tinyint、decimal
char.varchar属于字符串类型 1.char属于定长,能确切的知道列值的长度,也就是有多少个字符.当指定char(5)时,表示只能存5个字符,如5个英文‘a’,5个汉字‘我’,5个符号‘&am ...
- Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)
刚才有幸看了下 nvarchar(n)和varchar(n),感觉以前的认知有误. nvarchar(n):n指的是字符个数,范围是1-4000,存储的是可变长度的Unicode字符数据. 按字符存储 ...
- mysql中数据类型后面的数字到底是什么?
1.在mysql新建数据表的时候我们在数据类型后面经常会见到,或者添加数据,那么数据类型后面的数字到底是什么呢?之前以为int(3) 就代表最长数据就是3个字节,其实不是!! 我向num字段中插入: ...
- 数据库设计(字段)中的char、varchar、text和nchar、nvarchar、ntext的区别
char.varchar.text和nchar.nvarchar.ntext的区别 1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数 ...
- MySQL数据类型操作(char与varchar)
目录 一:MySQL数据类型之整型 1.整型 2.验证不同类型的int是否会空出一个存储正负号 3.增加约束条件 去除正负号(unsigned) 二:浮点型 1.浮点型 2.验证浮点型精确度 三:字符 ...
- MySQL中採用类型varchar(20)和varchar(255)对性能上的影响
1.MySQL建立索引时假设没有限制索引的大小,索引长度会默认採用的该字段的长度.也就是说varchar(20)和varchar(255)相应的索引长度分别为20*3(utf-8)(+2+1),255 ...
- MySQL int、char、varchar 最大值是多少?
1.int(len) (1)max(len) = 255 (2)存储范围: 带符号整数:-2147483648-2147483647. 无符号(unsigned)整数:0-4294967295. 2. ...
随机推荐
- laravel 博客项目部署到Linux系统后报错 权限都设置为777,仍然报错没有权限
阿里工程师最后给出解决方案.
- cume_dist(),名次分析——-最大排名/总个数
函数:cume_dist() over(order by id) select id,area,score, cume_dist() over(order by id) a, --按ID最大排名/总个 ...
- Java练习 SDUT-3422_小金问呀问不会问题
小金问呀问不会问题 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 众所周知,C语言的学习是我们程序设计基础的重点和主要 ...
- QQ 聊天机器人API
QQ机器人是腾讯陆续推出的的人工智能聊天机器人的总称. 都说小Q妹妹聪明好学,我们能够教她说话.也能够请他帮忙查询邮编.手机号,或者解释成语.翻译成语,据说她还会查询手机号码归属地.应用科学计算器. ...
- oracle函数 trunc(x[,y])
[功能]返回x按精度y截取后的值 [参数]x,y,数字型表达式,如果y不为整数则截取y整数部分,如果y>0则截取到y位小数,如果y小于0则截取到小数点向左第y位,小数前其它数据用0表示. [返回 ...
- 一条数据的漫游 -- X-Engine SIGMOD Paper Introduction
大多数人追寻永恒的家园(归宿),少数人追寻永恒的航向. ----瓦尔特.本雅明 背景 X-Engine是阿里数据库产品事业部自研的OLTP数据库存储引擎,作为自研数据库POLARDB X的存储引擎,已 ...
- HZOJ 分组
打了好多个代码. 对于测试点1,11:手动模拟. void QJ1_11() { ) { int tk; ]+a[]))tk=; ; if(tk<=k) { puts("); puts ...
- H3C 常用设备管理命令
- 如何编程实现快速获取一个整型数中的bit流中1的个数
int one_in_unsigned(unsigned n) { n =(n & ) & 0x55555555); n =(n & ) & 0x33333333); ...
- 禁用gpu首选
import osos.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"os.environ["CUDA_VIS ...