MySQL 中 varchar 和 char 有什么区别?
MySQL 中 varchar 和 char 的区别
在 MySQL 中,VARCHAR 和 CHAR 是两种常用的字符串类型,它们在存储方式、长度限制和使用场景等方面存在显著区别。
1. 定义与存储方式
CHAR
- 定义:
CHAR(n)是一种定长字符串类型,长度固定为n。 - 存储方式:存储时无论实际字符串长度如何,都会占用
n个字符的空间。如果长度不足,会在末尾自动填充空格。 - 特点:适用于长度固定的字符串,存储效率高,但可能浪费存储空间。
VARCHAR
- 定义:
VARCHAR(n)是一种变长字符串类型,最大长度为n。 - 存储方式:存储时仅占用实际字符串长度的空间,并额外增加 1~2 个字节记录长度(长度小于 255 时使用 1 个字节,超过 255 使用 2 个字节)。
- 特点:适用于长度不固定的字符串,节省空间,但在更新数据时可能涉及额外的存储操作。
2. 长度限制
CHAR:
- 最大长度为 255 个字符。
VARCHAR:
- 最大长度为 65535 字节(包括字符串和记录长度的存储字节),但受限于行的最大存储大小。
3. 存储效率
- CHAR:
- 由于是定长字符串,读取速度更快,但对于短字符串可能浪费空间。
- 在频繁更新时性能较稳定,不需要重新调整存储空间。
- VARCHAR:
- 对于短字符串,空间利用率高,但频繁更新可能需要重新分配存储空间,导致性能下降。
4. 使用场景
- CHAR:
- 适合存储长度固定的字符串,如身份证号、邮政编码、固定长度的账号等。
- VARCHAR:
- 适合存储长度变化较大的字符串,如用户名、邮件地址、描述性文字等。
5. 示例
表定义
CREATE TABLE example (
char_column CHAR(10),
varchar_column VARCHAR(10)
);
插入数据
INSERT INTO example (char_column, varchar_column) VALUES ('abc', 'abc');
存储结果
假设我们存储了字符串 'abc':
- CHAR:会存储为
'abc '(长度不足部分用空格填充)。 - VARCHAR:只存储
'abc',并额外增加 1 个字节记录长度。
6. 查询表现
如果查询中存在空格填充问题,CHAR 列的结果可能与预期不符。例如:
SELECT LENGTH(char_column), LENGTH(varchar_column) FROM example;
结果:
LENGTH(char_column) LENGTH(varchar_column) 10 3
7. 总结
| 特性 | CHAR | VARCHAR |
|---|---|---|
| 长度限制 | 固定长度,最多 255 个字符 | 最大长度 65535 字节 |
| 存储方式 | 定长存储,空间固定 | 变长存储,节省空间 |
| 存储效率 | 读取速度快,更新效率高 | 存储灵活,更新性能稍差 |
| 适用场景 | 长度固定的字段,如 ID、邮编 | 长度不定的字段,如用户名 |
建议:
- 如果数据长度固定或几乎固定,优先选择
CHAR。 - 如果数据长度变化较大,优先选择
VARCHAR,以节省存储空间。
MySQL 中 varchar 和 char 有什么区别?的更多相关文章
- MySQL中varchar与char区别
MySQL中varchar与char区别(转) MySQL中varchar最大长度是多少? 一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字 ...
- MySql中varchar和char,如何选择合适的数据类型?
背景 学过MySQL的同学都知道MySQL中varchar和char是两种最主要的字符串类型,varchar是变长的类型,而char是固定长度.那关于如何选择类型就成为令人头疼的事,很多初学者为了保证 ...
- Mysql中varchar和char区别
一.varchar和char的区别: 区别一:定长和变长 char表示定长.长度固定,varchanr表示变长,即长度可变. 即char类型是规定多少字长则必须存储多少字长,超过的长度的字段则只能截取 ...
- mysql 中Varchar 与char的区别
一.字符与字节与编码关系 ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间.一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制.最 ...
- mysql中varchar和char区别(思维导图整理)
由于mysql一直是我的弱项(其实各方面我都是很弱的),所以最近在看msyql,正好看到varchar和char区别,所以整理一下,便于以后遗忘. 0.0图片已经说明一切,但是系统说我字数不够,我真能 ...
- MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义
varchar与char的区别: 1).varchar与char的区别char是一种固定长度的类型,varchar则是一种可变长度的类型 尽可能的使用 varchar 代替 char ,因为首先变长 ...
- MySQL中VARCHAR与CHAR格式数据的区别
区别 CHAR与VARCHAR类型类似,但它们保存和检索的方式不同.CHAR有固定的长度,而VARCHAR属于可变长的字符类型.它们最大长度和是否尾部空格被保留等方面也不同.在存储和检索过程中不进行大 ...
- MySQL数据库中varchar与char类型的区别
在数据库中建表时,需要给数据定义一个数据库中的数据库类型,当需要给String类型定义一个数据库中的类型时,可以看见有两个选择,一个是varchar,另一个是char,有很多人不清楚两者的区别,包括自 ...
- 浅谈mysql中varchar(m)与char(n)的区别与联系
mysql建表长度的限制 在mysql建表时,出现以下报错信息: 错误一:行大小过大,所使用的表这种类型的最大的行大小,不算BLOB类型,是65535.(这是我翻译的) 原因是MySQL在建表的 ...
- 【转】MySQL中varchar最大长度是多少?
一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 5.0版本以上,varchar(20),指的是20字符,无 ...
随机推荐
- LeetCode刷题:AddressSanitizer: heap-buffer-overflow问题请教||全局变量和引用传递的区别
在刷 https://leetcode.cn/problems/sudoku-solver/description/ 遇到AddressSanitizer: heap-buffer-overflow的 ...
- EIP和NAT结合如何实现统一公网出口IP
本文分享自天翼云开发者社区<EIP和NAT结合如何实现统一公网出口IP>,作者:j****n 通过EIP和NAT网关结合,为已绑定EIP的ECS实例统一公网出口IP,有利于更高效的管理互联 ...
- Linux 部署DVWA靶场
Linux 部署DVWA靶场 DVWA是一款开源的网络安全漏洞实践平台,专为安全学习者设计.它涵盖了XXS.SQL注入.文件上传.文件包含.CSRF和暴力破解等多种安全漏洞环境,每个漏洞都有从简单到复 ...
- CTFHub技能树-密码口令wp
引言 仅开放如下关卡 弱口令 通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令. 打开环境,是如下界面,尝试一些弱口令密码无果 利用burpsuite抓包,然后爆破,发 ...
- ABB机器人伺服电机维修有脉冲输出时不工作怎么处理
1.ABB机器人伺服电机维修有脉冲输出时不工作怎么处理? 监督操控器的脉冲输出当时值以及脉冲输出灯是否闪烁,承认指令脉冲现已履行并现已正常输出脉冲:查看操控器到驱动器的操控电缆,动力电缆,编码器电缆是 ...
- AngleSharp :在 C# 中轻松解析和操作 HTML/XML 文档
AngleSharp 是一个 C# 库,主要用于解析和操作 HTML 和 XML 文档,类似于浏览器的 DOM 操作.允许你在 C# 中使用类似浏览器的方式处理网页数据,进行网页抓取.数据提取和处理等 ...
- 『Python底层原理』--Python字符串的秘密
在现代编程中,字符串是不可或缺的数据类型. 无论是处理用户输入.文件读写还是网络通信,字符串都扮演着核心角色. 然而,字符串的处理并非简单地将字符拼接在一起,它涉及到字符集.编码以及编程语言的底层实现 ...
- python xlrd 读取表格 单元格值被覆盖
代码实现顺序: 按行读取 按列读取 满足if条件 单元格值赋值给字典 实现代码: datas = []# 定义一个空列表 for i in range (3,nrows): sheet_data={} ...
- tsconfig.json报错问题
tsconfig.json报错问题 前言 创建 tsconfig.json 配置文件时,VS Code 会自动检测当前项目当中是否有ts文件,若没有则报错,提示用户需要创建一个ts文件后,再去使用ty ...
- kubernetes failed to create kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
错误原因 kubernetes 的文件驱动与 docker 不一致,导致镜像无法启动. docker info 可以看到驱动方式 Cgroup Driver: systemd. 解决方案 统一资源管理 ...