前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【译】MySQL char、varchar的区别

【译】MySQL char、varchar的区别

作者头像
冷冷
发布2018-02-08 12:19:45
2.1K0
发布2018-02-08 12:19:45
举报
文章被收录于专栏:冷冷冷冷

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

介绍

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

CHAR

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

代码语言:javascript
复制
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中启用严格模式。所以它会为查询生成错误。

代码语言:javascript
复制
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。删除空格的时间与此相比显然可以忽略不计。

原文:http://www.xpertdeveloper.com/2011/12/char-varchar-in-mysql/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
    • CHAR
      • VARCHAR
      • 数据检索
        • CHAR
          • VARCHAR
          • CHAR或VARCHAR?
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档