iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL CHAR和VARCHAR该如何选择
  • 135
分享到

MySQL CHAR和VARCHAR该如何选择

MySQLCHARMySQLVARCHAR 2022-05-23 11:05:52 135人浏览 薄情痞子
摘要

目录VARCHAR 和 CHAR 类型结语:VARCHAR 和 CHAR 类型 VARCHAR 和 CHAR 是两种主要的字符串类型,用于存储字符。不幸的是,由于实现的方式依赖于存储引擎,因此很难解释这些字符串在磁

目录
  • VARCHAR 和 CHAR 类型
  • 结语:

VARCHAR 和 CHAR 类型

VARCHAR 和 CHAR 是两种主要的字符串类型,用于存储字符。不幸的是,由于实现的方式依赖于存储引擎,因此很难解释这些字符串在磁盘和内存中如何存储,除了除了常用的 InnoDB 和 MyISAM 外,假设你使用了其他存储引擎,应当仔细阅读存储引擎的文档。​

VARCHAR 存储可变长度的字符串,也是最常用的字符数据类型。相比固定长度的类型,VARCHAR 所需的存储空间更小,它会尽可能少地使用存储空间(例如,短的字符串占据的空间)。对于 MyISAM 来说,如果创建表的时候指定了 ROW_FORMAT=FIXED 的话,那么会使用固定的空间存储字段而导致空间浪费。VARCHAR 使用1-2个额外的字节存储字符串的长度:当最大长度低于255字节的时候使用1个字节,如果更多的话就使用2个字节。因此,拉丁字符集的 VARCHAR(10)会使用11个字节的存储空间,而 VARCHAR(1000)则会使用1002个字节的存储空间。​

VARCHAR 由于能够节省空间,因此可以改善性能。但是,由于长度可变,当更新数据表的时候数据行的存储空间会变化,这一定程度上会带来额外的开销。如果数据行的长度导致原有的存储位置无法存放,那么不同的存储引擎会做不同的处理。例如 MyISAM 可能产生数据行的碎片,而 InnoDB 需要进行磁盘分页来存放更新后的数据行。​

通常,如果最大的列长度远远高于平均长度的话(例如可选的备注字段),使用 VARCHAR 是划算的,同时如果更新的频次很低,那么碎片化也不会是一个问题。需要注意的是,如果使用的是 UTF-8字符集,则实际存储的字节长度是根据字符定的。对于中文,推荐的存储字符集是 utf8mb4。​

CHAR 类型的长度是固定的,Mysql 会对每个字段分配足够的存储空间。存储CHAR 类型值的时候,mysql 会移除后面多出来的空字符。值是使用空字符进行对齐以便进行比较。对于短的字符串来说,使用 CHAR 更有优势,而如果所有的值的长度几乎一致的话,就可以使用 CHAR。例如存储用户密码的MD5值时使用 CHAR 就更合适,这是因为 MD5的长度总是固定的。同时,对于字段值经常改变的数据类型来说,CHAR 相比 VARCHAR 也更有优势,因为 CHAR 不会产生碎片。对于很短的数据列,使用 CHAR 比 VARCHAR更高效,例如使用CHAR(1)存储逻辑值的 Y 和 N,这种情况下只需要1个字节,而 VARCHAR 需要2个字节。 对于移除空字符这个特性会感觉奇怪,我们举个例子:


CREATE TABLE t_char_varchar_test (
  id INT PRIMARY KEY,
  char_col CHAR(10),
  varchar_col VARCHAR(10)
);

INSERT INTO t_char_varchar_test 
VALUES 
(1, 'string1', 'string1'),
(2, '  string2', '  string2'),
(3, 'string3  ', 'string3  ');

按上面的结果插入数据表后,string2中的前置空格不会移除,但使用 CHAR 类型存储时,string3尾随空格会被移除,使用 sql 查询结果来检验一下:


SELECT CONCAT("'", char_col, "'"), CONCAT("'", varchar_col, "'") 
FROM t_char_varchar_test WHERE 1

得出来的结果如下,可以看到 CHAR 类型的 string3后面的空格被移除了,而 VARCHAR类型的没有。这种情况大多数时候不会有什么问题,实际在应用中也经常会使用 trim 函数移除两端的空字符,但是如果确实需要存储空格的时候,那就需要注意不要选择使用 CHAR 类型:

数据如何存储是由存储引擎决定的,而且存储引擎处理固定长度和可变长度的数据的方式并不相同。Memory 引擎使用固定大小的行,因此它需要分配最大可能的存储空间——即便数据长度是可变的。但是,对于字符串的对齐和空字符截断是由 MySQL 服务端完成的,因此所有存储引擎都是一样的。​

与 CHAR 和 VARCHAR 相似的是 BINARY和 VARBINARY,用于存储二进制字节字符,BINARY 的对齐使用字符0的字节值来对齐,并且再获取值的时候不会截断。如果需要使用字符的字节值而不是字符的话,使用 BINARY 会更高效,这是因为比较时,一方面不需要考虑大小写,另一方面是MySQL一次只比较一个字节。​

结语:

在实际数据表设计中,大多数情况下会选择使用 VARCHAR,但 VARCHAR 需要额外的1-2个字节存储字符串长度。需要注意的是在应用中最好能够限定字段的最大长度,从而可以使得数据表尽可能使用短的 VARCHAR来提高效率。同时,对于固定长度、长度很短或长度变化很小的字符类型,推荐使用 CHAR 类存储,以提高存储效率。

以上就是MySQL CHAR和VARCHAR的选择的详细内容,更多关于MySQL CHAR和VARCHAR的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL CHAR和VARCHAR该如何选择

本文链接: https://www.lsjlt.com/news/10360.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql中varchar和char区别
    mysql中的varchar和char数据类型之间存在以下区别:存储空间:varchar可变长,char固定长。性能:varchar检索和更新更快,char排序和查找更快。使用场景:va...
    99+
    2024-05-01
    mysql
  • mysql char 和varchar的区别?
    char 和varchar的区别 char 一定会使用指定的空间,varchar是根据数据来定空间 2、 char的插入数据效率理论上比varchar高:varchar是需要通过后面的记录数来计算 ...
    99+
    2023-09-22
    mysql 数据库
  • mysql中varchar和char的区别
    mysql 中 varchar 和 char 数据类型的主要区别在于存储方式:char 以固定长度存储,而 varchar 根据实际字符串长度存储。char 适合长度固定的字符串,索引查...
    99+
    2024-04-29
    mysql
  • 怎么使用mysql char和varchar
    这篇文章主要介绍“怎么使用mysql char和varchar”,在日常操作中,相信很多人在怎么使用mysql char和varchar问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用mysql cha...
    99+
    2023-06-25
  • MySQL中varchar和char类型的区别
    目录前述VARCHAR类型VARCHAR适用情况CHAR类型测试VARCHAR(5)与VARCHAR(200)的区别总结前述 VARCHAR和CHAR是两种最主要的字...
    99+
    2024-04-02
  • 怎么在MySQL中定义CHAR 和 VARCHAR
    怎么在MySQL中定义CHAR 和 VARCHAR?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。CHAR 和 VARCHAR 的定义CHAR(N) 用来保存固定长度...
    99+
    2023-06-15
  • mysql中char和varchar的区别有哪些
    本篇内容主要讲解“mysql中char和varchar的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql中char和varchar的区别有哪些...
    99+
    2024-04-02
  • 在mysql中char和varchar有什么区别
    char和varchar是mysql中存储字符串的两种数据类型。char为固定长度,varchar为可变长度,且仅分配所需的最小存储空间。char字符串填充到指定长度,而varchar不...
    99+
    2024-04-26
    mysql
  • MySQL中varchar和char类型有什么区别
    本篇内容介绍了“MySQL中varchar和char类型有什么区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!VARCHAR类型VARCH...
    99+
    2023-06-25
  • 如何对比MySQL中int、char以及varchar的性能
    小编给大家分享一下如何对比MySQL中int、char以及varchar的性能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!网络上有许多似是而非的“谣言”,当然都不是恶意,绝大部分都是开发...
    99+
    2024-04-02
  • Python和Java该如何选择?选哪个好?
      编程是很多人都想要掌握的技术,但是在行业之中编程语言有很多种,每个人的爱好,想要从事领域不同,自然选择也是不同,比较常见的编程语言就是Python和Java,那么对于这两种语言选择哪个好  在这里为大家介绍一下,其实Python和Jav...
    99+
    2023-06-02
  • MySQL中char、varchar和text三者的区别是什么
    今天就跟大家聊聊有关MySQL中char、varchar和text三者的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。具体说明:char:...
    99+
    2024-04-02
  • 服务器该如何选择
    服务器选择的方法:1、根据自身的具体业务需求选择合适的服务器,如需求备案的选择国内服务器;2、根据自身的业务看是否有攻击,如有有攻击就选择带有防御的服务器;3、选择能提供完善售后服务的idc商,以保证能及时解决服务器故障问题;4、对稳定性风...
    99+
    2024-04-02
  • MySQL中的char和varchar&mysql中varchar能存多少汉字、数字,以及varchar(100)和varchar(10)的区别
    1、varchar能存多少汉字、数字? 具体还是要看版本的,一个字符占用3个字节 ,一个汉字(包括数字)占用3个字节=一个字符4.0版本以下,varchar(100),指的是100字节,如果存放UTF8汉字时,只能存33个(每个汉...
    99+
    2023-08-19
    Java MySQL char varchar
  • MySQL中的char和varchar&mysql中varchar能存多少汉字、数字,以及varchar(100)和varchar(10)的区别
    1、varchar能存多少汉字、数字? 具体还是要看版本的,一个字符占用3个字节 ,一个汉字(包括数字)占用3个字节=一个字符4.0版本以下,varchar(100),指的是100字节,如果...
    99+
    2023-09-05
    Java MySQL char varchar
  • 新手应该如何选择c语言和java
    这篇文章主要介绍新手应该如何选择c语言和java,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方式编译、处理低级...
    99+
    2023-06-14
  • Linux容器和虚拟机应该如何选择
    小编给大家分享一下Linux容器和虚拟机应该如何选择,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Linux容器vs虚拟机 – 应用程序与操作...
    99+
    2023-06-16
  • requestAnimationFrame和setInterval该怎么选择
    这篇文章主要介绍“requestAnimationFrame和setInterval该怎么选择”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“requestAnimationFrame和setInte...
    99+
    2023-07-05
  • mysql如何转换varchar
    这篇文章主要介绍了mysql如何转换varchar,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 mysql转换...
    99+
    2024-04-02
  • 应该如何选择虚拟主机
    这篇文章主要为大家展示了“应该如何选择虚拟主机”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“应该如何选择虚拟主机”这篇文章吧。虚拟主机是在网络服务器上划分出一定...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作