【MySQL字符串数据类型优化】char和varchar的这些细节你们都清楚吗?

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【MySQL字符串数据类型优化】char和varchar的这些细节你们都清楚吗?

前言

学习过MySQL数据库的友友们肯定对 char和varchar这两个字符串数据类型并不陌生,那么这两个类型的 区别、细节和使用场景你清楚吗?

char与varchar对比

  • char(size),固定长度字符串,最大==255字符==。
  • varchar(size),可变长度字符串,最大==65535字节==(注意这里是字节,在不同的编码规则中字符占用的字节是不相同的),若没定义表的编码则默认为utf8【utf8编码最大21844字符;gdk编码最大为32766字符】
  • (注意字符而非字节)
  • char分配固定字符,char(4)占用四个字符,存入一个字符,也会在内存中占用四个字符空间。
  • varchar按实际使用分配空间,还需使用1-3个字节来记录存放内容长度,总占用 = L(实际数据大小)+(1-3)个字节.

代码样例

CREATE TABLE t4(
    `name` CHAR(255));
#创建一个表t4,定义name的长度为255字符
INSERT INTO t4 VALUES('ABCD');
INSERT INTO t4 VALUES('我是你D');
#给表中添加英文、中文都可以
CREATE TABLE t5(
    `name` VARCHAR(32766)) CHARSET gbk;
#定义编码为gdk,最大长度为32766字符,因为gbk中文占2个字节,英文占1个字节
CREATE TABLE t6(
    `name` VARCHAR(21844));
    #定义编码为默认utf8,最大长度为21844字符,因为utf-8中文占3个字节,英文占1个字节

char与varchar的使用细节

  1. char(4),这个4表示字符数,非字节数,无论中文还是字母都是四个(占用字符空间固定)。
  2. varchar(4),这个4也表示字符数,但是这里存放的字母或者中文是按照定义表时的编码来计算(占用字符空间不固定)。

char和varchar的使用情景

  1. 数据定长,推荐char。例如md5密码(固定32为)、邮编、手机号、身份证号等。

2. 长度不确定,使用varchar。例如留言、文章等。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
21天前
|
SQL 自然语言处理 关系型数据库
MySQL的match匹配多个字符串的语法
【8月更文挑战第29天】MySQL的match匹配多个字符串的语法
46 2
|
8天前
|
SQL 关系型数据库 MySQL
MySQL根据某个字段包含某个字符串或者字段的长度情况更新另一个字段的值,如何写sql
MySQL根据某个字段包含某个字符串或者字段的长度情况更新另一个字段的值,如何写sql
21 0
|
20天前
|
存储 关系型数据库 MySQL
MySQL 中的 BLOB 数据类型深入解析
【8月更文挑战第31天】
65 0
|
20天前
|
存储 关系型数据库 MySQL
|
20天前
|
存储 数据管理 数据库
|
20天前
|
存储 XML 关系型数据库
深入理解MySQL中的BLOB和TEXT数据类型
【8月更文挑战第31天】
105 0
|
21天前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
92 0
|
存储 关系型数据库 MySQL
面试时被这样一个问:”存储MD5值应该用VARCHAR还是用CHAR?
一个5年工作经验的小伙伴,在面试的时候被这样一个问题。说”存储MD5值应该用VARCHAR还是用CHAR“,他一时间不只如何选择,感觉用VARCHAR也可以,用CHAR也行。希望我来帮忙分析一下。
103 0
|
4月前
|
存储 关系型数据库 MySQL
MySQL字段的字符类型该如何选择?千万数据下varchar和char性能竟然相差30%🚀
本篇文章来讨论MySQL字段的字符类型选择并深入实践char与varchar类型的区别以及在千万数据下的性能测试
MySQL字段的字符类型该如何选择?千万数据下varchar和char性能竟然相差30%🚀
|
4月前
|
存储 数据库
5. CHAR和VARCHAR的区别?
`CHAR`和`VARCHAR`在数据库中有所不同:`CHAR`长度固定,用空格填充,存储效率高,英文占1字节,汉字占2字节;而`VARCHAR`长度可变,节省空间,英文和汉字都占2字节。
48 0