博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【译】MySQL char、varchar的区别
阅读量:5774 次
发布时间:2019-06-18

本文共 1744 字,大约阅读时间需要 5 分钟。

  hot3.png

本文旨在涵盖两种数据类型的相似性和差异。两者几乎相同,但在某些方面,两略有不同。

介绍

CHAR和VARCHAR几乎相同,但在存储和从数据库中检索数据的阶段,两者都不同。 对于这两种数据类型,我们必须传递length说明符,它表示字段可以保存多少数据。例如char(30)和varchar(30),这意味着这些数据类型的字段最多可以容纳30个字符。 对于CHAR,此长度可以是从0到255之间的任何值,对于VARCHAR可以是从0到65,535。但对于VARCHAR,此最大限制取决于您使用的最大行大小和字符集。 数据存储 在这两种类型中,数据的存储是非常不同的。首先是CHAR的情况。

CHAR

当值存储在CHAR字段中时,剩余的字符将用空格填充。 例如,一个字段是“name CHAR(5)”,并且您要存储只是“jack”,则实际值将存储为“jack ”。

name CHAR (5 )  ---------------------------------------     value         actual_storage   ---- -----------------------------------     'EX'          '恩'      'EXPER'       'EXPER'     '专家'      ' exper '   ---------------------------------------

VARCHAR

与CHAR不同,VARCHAR只占用基于存储的数据的空间,因此,例如,如果我们有20个字节放入VARCHAR(30)的,那么这将占据基于数据大小的空间(20字节)。 VARCHAR的另一件事是,如果数据小于255个字符,则使用1个字节,对于大于255个字符的数据,则占用2个字节作为长度前缀

对于这两种数据类型,如果传递的数据大于指定的长度,MySQL将截断数据以适应创建表时指定的长度,并且将返回警告。但是,如果SQL Strict模式未启用,情况将是这样。 但是如果你想限制数据的截断,你应该在MySQL中启用严格模式。所以它会为查询生成错误。

name VARCHAR (5 )  ---------------------------------------     value         actual_storage   ---- -----------------------------------     'EX'          '恩'      'EXPER'       'EXPER'     '专家'      ' exper '   ---------------------------------------

数据检索

这两种类型的数据检索也非常不同。

CHAR

如上所述,如果提供的数据较少,CHAR将向数据中添加空格,因此在检索数据时,它将删除添加的空格并提供数据。

VARCHAR

只会存储您通过查询的数据,如CHAR,它不会对数据执行任何空间删除过程。

CHAR或VARCHAR?

所以现在的问题是,哪一个使用?使用这些数据类型完全取决于需要。

  • 如果你有固定大小的数据,就像“Y”和“N”的标志。然后它将更好地使用CHAR而不是VARCHAR。原因是长度前缀与VARCHAR一起使用。 所以如果你使用VARCHAR,那么它将为“Y”和“N”存储2个字节。(即,1字节用于数据,1字节用于长度前缀),并且CHAR将仅存储仅为数据的1字节。

  • 对于大型数据集,只使用固定大小的记录,因此只能使用CHAR类型。

为什么?想象一下,MySQL想要检索集合的第10个记录。 使用VARCHAR,它必须读取第一个记录的前缀以知道第二个开始的哪个字节,等等。 只有CHAR,MySQL知道每个记录是x字节长,因此第10个记录是在10 * x字节文件。 因此,使用大型事实表时,只使用CHAR类型是一个很好的做法。 它可以大大减少您的I / O。删除空格的时间与此相比显然可以忽略不计。

原文:

转载于:https://my.oschina.net/giegie/blog/843998

你可能感兴趣的文章
用友网络陈强兵:企业互联网需解决五大问题
查看>>
SMA推出Powerwall兼容Sunny Boy Storage逆变器
查看>>
云路由 vyatta 体验(二)NAT
查看>>
C++、Java、JavaScript中迭代器的用法
查看>>
jackson not marked as ignorable异常
查看>>
Python version 2.7 required, which was not foun...
查看>>
android 模拟器 横竖屏切换
查看>>
centos7.3 下安装 composer,解决Failed to decode zlib stream错误
查看>>
Git 常用命令
查看>>
在Postgres 数据库中生成36位的UUID代码
查看>>
小黑小波比.功能测试登录用户
查看>>
Java enum用法详解
查看>>
去云端的多条途径
查看>>
Docker容器从一知半解到入门
查看>>
关于“方法参数”
查看>>
Redis命令总结
查看>>
unable to write 'random state'错误解决
查看>>
win7 wamp 下安装pear phpunit
查看>>
context:annotation-config vs component-scan
查看>>
HTTP协议理解与应用总结
查看>>