MySQL CHAR 和 VARCHAR 的区别

文章目录

  • 1.区别
    • 1.1 存储方式不同
    • 1.2 最大长度不同
    • 1.3 尾随空格处理方式不同
    • 1.4 读写效率不同
  • 2.小结
  • 参考文献

在 MySQL 中,CHAR 和 VARCHAR 是两种不同的文本数据类型,CHAR 和 VARCHAR 类型声明时需要指定一个长度,该长度指示您希望存储的最大字符数。例如,CHAR(30) 最多可以容纳 30 个字符。

它们虽然相似,但存在一些重要区别。

1.区别

根据 MySQL 的官方文档 The CHAR and VARCHAR Types 中的描述, varchar和char的区别主要有:

1.1 存储方式不同

char(N) 定长存储。最多存储 N 个字符,字符数没超出则用空格填充,超过就会被截断,超过的部分丢弃。(如果是严格模式,则会拒绝插入并提示错误信息)

varchar(N) 变长存储。最多存储 N 个字符,没超出则有几个存储几个,超过就会被截断,超过的部分丢弃。(如果是严格模式,则会拒绝插入并提示错误信息)

此外,VARCHAR 在数据前存储为1字节或2字节的长度。长度前缀表示值中包含的字节数。如果值需要不超过255个字节,则列使用一个字节,如果值需要超过255个字节,则使用两个字节。

下表通过显示将各种字符串值存储到 CHAR(4) 和 VARCHAR(4) 列中的结果来说明 CHAR 和 VARCHAR 之间的区别(假设该列使用单字节字符集,如 latin1)。

ValueCHAR(4)Storage RequiredVARCHAR(4)Storage Required
‘’’ ’4 bytes‘’1 byte
‘ab’'ab ’4 bytes‘ab’3 bytes
‘abcd’‘abcd’4 bytes‘abcd’5 bytes
‘abcdefgh’‘abcd’4 bytes‘abcd’5 bytes

表最后一行显示的值仅在不使用严格 SQL 模式时才适用;如果启用严格模式,则不会存储超过列长度的值,并导致错误。

1.2 最大长度不同

char 最大长度为 255 个字符,和字符编码无关。varchar 最大长度为 65,535 字节,注意 varchar 最大长度是字节,因为该上限为行的最大长度。

1.3 尾随空格处理方式不同

char 取出时会将尾随空格去掉,而 varchar 不会。

例如 char(10),保存字符串"hello "(末尾有一个空格),存到数据库就是"hello “(有5个空格),然后查询出来只是"hello”(没有空格),占10个字节。

varchar(10),保存字符串"hello "(有一个空格),存到数据库就是"hello "(有1个空格),查询出来也是"hello "(有1个空格),占 6 个字节。

1.4 读写效率不同

char 存取效率比 varchar 要高,因为其长度固定,数据库系统可以更容易地计算位置和长度。但这也意味着占用更多的磁盘空间,可谓是以空间换时间。

而 varchar 则刚好相反,节省空间但存取效率相对较低。

2.小结

如果你需要固定长度的数据,一般是在存储数据长度差异不大的时候使用 CHAR,但要注意它会浪费存储空间。如果你需要更有效地使用存储空间或处理可变长度的数据,可以使用 VARCHAR。

通常,大部分情况下,VARCHAR更为常见,因为它更节省空间。


参考文献

11.3.2 The CHAR and VARCHAR Types - mysql.com
Section 5.1.11 Server SQL Modes
MySQL中char与varchar的区别:存储机制、性能差异

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/125141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我的架构复盘

1、背景 我目前公司研发中心担任软件研发负责人,研发中心分为3组,总共有30多人。研发中心主要开发各类生产辅助工具,比如巡检、安全教育等系统。系统不对外,只在公司内部使用。 就我个人来说,作为研发负责人&#xf…

【C语言_题库】C语言:编写一个程序,输入一组字符串,将字符串中的小写字母转换为大写字母,其它字符不变,并输出。

把键盘输入的一行字符串的小写字母转换成大写字母,其余字符不变,进行输出,直到遇到回车为止。 具体说明 【问题描述】 从键盘输入一行英文字符串,把所有小写字母变成大写字母,其他字母和字符保持不变。 【输入形式】 输入一行字符串,含大小写。 【输出形式】 输出大写字…

考试成绩这样分发

老师们,还在为每次繁琐的成绩查询而头痛?今天我就要给大家带来一个超级实用的教程,让你轻松解决这个问题! 我来介绍一下这个神秘的“成绩查询页面”。别以为它很复杂,其实它就是一个简单的网页,上面会有每个…

详解—数据结构《树和二叉树》

目录 一.树概念及结构 1.1树的概念 1.2树的表示 二.二叉树的概念及结构 2.1概念 2.2二叉树的特点 2.3现实中的二叉树 2.4数据结构中的二叉树 2.5 特殊的二叉树 2.6二叉树的存储结构 2.6.1二叉树的性质 2.6.2 顺序结构 2.6.3链式存储 三. 二叉树的链式结构的遍历 …

TIDB日期和时间类型

TIDB日期和时间类型 一、日期和时间 DATE、DATETIME和TIMESTAMP 1、DATE DATE 类型的格式为 YYYY-MM-DD,支持的范围是 1000-01-01 到 9999-12-31。 2、TIME 类型 TIME 类型的格式为 HH:MM:SS[.fraction],支持的范围是 -838:59:59.000000 到 838:59…

美术培训服务预约小程序的作用是什么

线下培训教育机构很多,涉及到的行业及种类很多,美术培训就是其中较为重要的一类,尤其是青少年群体,其拓展度很深,而对商家来说,其主要生源在本地同城,因此品牌宣传和渠道发展、学员赋能很重要。…

盘古M900测试及FT D2000对比

盘古M900测试使用华为W525整机.硬件配置为: CPU:华为盘古M900 内存:板贴DDR4 8G(镁光) SSD: 长江存储 PC005 256G NVME 安装UOS 系统:uniontechos-desktop-20-professional-W525-1050-update5-arm64.…

AI虚拟主播源码系统 搭建专属自己的直播间+送礼物 功能强大 带完整搭建教程

在互联网的不断发展下,直播行业迅速崛起,成为一种新的信息传播和娱乐形式。越来越多的人开始通过直播平台进行交流、互动和分享。因此,开发一款能够提供高质量、稳定直播服务的平台具有重要的现实意义。 随着人工智能技术的不断进步&#xf…

蓝桥杯每日一题2023.10.29

螺旋折线 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 在图中我们可以观察到四个对角线的值均为特殊点&#xff0c;其他的点可以根据这几个 进行偏移量的计算从而进行表示&#xff0c;此题主要是找到规律即可 #include<bits/stdc.h> using namespace std; typedef long…

红米电脑硬盘剪切

Redmi R14 2023版固态硬盘剪切 工具准备操作结尾语 首先要说明&#xff0c;本文所说的操作不一定适合你的电脑&#xff0c;因为电子产品更新换代过快&#xff0c;你的硬盘不一定能剪切&#xff0c;在操作前一定要仔细观察硬盘的型号&#xff0c;是否为同款&#xff0c;我上了图…

web——css样式

服务器字体&#xff1a; 服务器字体&#xff1a;在不同的电脑&#xff0c;不同的操作系统&#xff0c;不同的浏览器之间字体风格的通体 定义 font-face { 设置服务器字体的名字 font-family: admin; 设置字体资源路径 字体资源后缀.ttf/.otf format 设置字体格式 TrueType O…

测试C#调用Aplayer播放视频(1:加载Aplayer控件)

微信公众号“Dotnet跨平台”的文章《开源精品&#xff0c;使用 C# 开发的 KTV 点歌项目》中使用了迅雷开源APlayer播放引擎。最近在学习有哪些能拿来播放视频的组件或控件&#xff0c;于是准备试试&#xff0c;根据文章中的介绍&#xff0c;在迅雷APlayer播放引擎网站中下载了A…

【23真题】对不起,由于我的择校分析,这所可能会炸!

哈喽大家好&#xff0c;现在这个时间节点&#xff0c;有很多同学开始刷真题了&#xff01;所以23真题系列正式启动&#xff01;小马哥将全面发布23真题及详细解析&#xff01; 注意太原科技大学&#xff0c;自我发了择校分析以后&#xff08;苍天为证&#xff0c;我真的没有任…

C++面试——多线程详解

C11提供了语言层面上的多线程&#xff0c;包含在头文件<thread>中。它解决了跨平台的问题&#xff0c;提供了管理线程、保护共享数据、线程间同步操作、原子操作等类。C11 新标准中引入了5个头文件来支持多线程编程&#xff0c;如下图所示&#xff1a; 多进程与多线程 多…

计数排序(秒懂版)

public class CountingSort {int[] sort() {int N 10000;int M 100;//假设A中最大值为100int A[] new int[N];//1~k,原数组int B[] new int[N];//1~k,Stores incompletely sorted numbersint C[] new int[M 1];//0~n,辅助排序数组for (int i 0; i < M; i) {C[i] 0;}…

【Linux】多路IO复用技术①——select详解如何使用select模型在本地主机实现简易的一对多服务器(附图解与代码实现)

这一篇的篇幅可能有点长&#xff0c;但真心希望大家能够静下心来看完&#xff0c;相信一定会有不小的收获。那么话不多说&#xff0c;我们这就开始啦&#xff01;&#xff01;&#xff01; 目录 一对一服务器中的BUG 如何实现简易的一对多服务器 实现简易一对多服务器的大体…

Calcite 通过 API 定义 RelNode 示例

1&#xff09;总结 通过 RelBuilder 创建 RelNode。 2&#xff09;代码示例 MyRelBuilder import cn.com.ptpress.cdm.ds.csv.CsvSchema; import org.apache.calcite.plan.RelOptUtil; import org.apache.calcite.plan.RelTraitDef; import org.apache.calcite.rel.RelNode…

大数据-Storm流式框架(六)---Kafka介绍

Kafka简介 Kafka是一个分布式的消息队列系统(Message Queue)。 官网&#xff1a;Apache Kafka 消息和批次 kafka的数据单元称为消息。消息可以看成是数据库表的一行或一条记录。 消息由字节数组组成&#xff0c;kafka中消息没有特别的格式或含义。 消息有可选的键&#x…

Kubernetes Taint(污点) 和 Toleration(容忍)

Author&#xff1a;rab 目录 前言一、Taint&#xff08;污点&#xff09;1.1 概述1.2 查看节点 Taint1.3 标记节点 Taint1.4 删除节点 Taint 二、Toleration&#xff08;容忍&#xff09; 前言 Kubernetes 中的污点&#xff08;Taint&#xff09;和容忍&#xff08;Toleration…

3D模拟场景开发引擎

在3D工程模拟开发中&#xff0c;有一些专门的引擎和工具可供选择&#xff0c;以帮助您创建逼真的三维模拟和模型。以下是一些用于3D工程模拟的开发引擎和工具&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流…