`

选择优化的数据类型 (三)CHAR与VARCHAR

阅读更多

VARCHAR和CHAR

(这里假设使用的是InnoDB或MyISAM)

 

VARCHAR:

它能比固定长度的类型占用的更少的存储空间,因为它只占用了自己需要的空间(也就是说较短的值占用的空间就较少)。例外情况是使用ROW_FORMAT=FIXED创建MyISAM表,它为每行使用固定长度的空间,可能会造成浪费。

 

varchar使用额外1到2个字节来存储值长度。如果列的的最大长度小于或等于255时,则使用1字节,否则则使用2字节。

 

varchar能节约空间,所以对性能有帮助。然而由于行的长度是可变的,它们在更新的时候可能会发生变化 ,这会引起额外的工作。如果行的长度增加并不适合于原始的位置时,具体的行为则会和存储引擎相关。例如,MySIAM会把行拆开,InnoDb则可以会分页。另外的存储引擎还可能不会在合适的位置更新数据。

当最大长度远大于平均长度,并且很少发生更新的时候,通常适合使用varchar。还有当你使用复杂的字符集时,如UTF-8,它的每个字符都可能占用不同的存储空间。

 

在5.0及以上版本,无论是保存还是取值,mysql都会保留字符串末尾的空格。但是在4.1及之前的版本,这些空格会被去掉。

 

CHAR:

char是固定长度的,当保存char值的时候,mysql会去掉任何末尾的空格。进行比较的时候,空格会被填充到字符串末尾。

 

char适合存储用户密码的MD5哈希值,它的长度总是一样的。对于经常改变的值,char也好于varchar,因为固定长度的行不容易产生碎片,对于很短的列,char的效率也高于varchar。char(1)字符串对于单字节字符集只会占用一个字节,但是varchar(1)则会占用2个字节,因为1个字节用来存储长度信息。


char和varchar的兄弟类型是binary和varbinary,它们用于保存二进制字符串。二进制字符串和传统的字符很类似,但是它们保存的是字节,而不是字符,填充也有所不同。mysql用\0(0 字符)填充binary值,而不是空格,并且不会在获取数据的时候把填充的值去掉。(如果不想在取值的时候,值发生改变,就不要使用binary,因为mysql会用\0把它填充到需要的长度)。


varchar(5)和varchar(200)保存'hello'所占用的空间是一样的,那么使用较短的列有什么优势吗?

其实在巨大的优势,较大的列会使用更多的内存,因为mysql通常会分配固定大小的内存块来保存值。这对排序或使用基于内存的临时表尤其不好,同样的事情也会发生在使用文件排序或基于磁盘的临时表的时候。

 

最好的策略就是只分配需要的空间.

分享到:
评论

相关推荐

    对比MySQL中int、char以及varchar的性能

    本文主要讨论了int、char和varchar这三种常见数据类型在性能上的差异。通常,这些差异在无索引和有索引的情况下的表现会有所不同。 首先,从无索引的全表扫描角度来看,测试结果显示int和bigint(即i8)在查询性能...

    char,varchar以及varchar2的区别

    今天我们将深入探讨三种常见的字符串类型:`char`、`varchar`和`varchar2`,它们在不同的数据库系统中有着微妙的区别。 1. **char类型** `char`是一种固定长度的字符串类型,无论实际存储的数据是否填满指定长度,...

    VARCHAR与CHAR字符型数据的差异.docx

    CHAR和VARCHAR是两种常见的字符型数据类型,它们各自有着独特的特点和适用场景。 首先,CHAR是固定长度的,这意味着不论实际存储的数据有多长,数据库都会预留指定长度的空间。例如,CHAR(255)会为每个值预留255个...

    char和varchar在mysql中的效率怎样.docx

    在MySQL数据库中,`CHAR`和`VARCHAR`是两种常见的字符串数据类型,它们在存储和处理数据时具有不同的效率特点。理解这两种类型的差异对于优化数据库性能至关重要。 `CHAR`是一种固定长度的数据类型,这意味着无论...

    oracle char,varchar,varchar2的区别和使用方法

    在 Oracle 数据库中,字符串类型是极为常见的数据类型之一,主要用于存储文本数据。其中最常用的三种类型包括:`CHAR`, `VARCHAR`, 和 `VARCHAR2`。这三种类型的差异主要体现在存储方式、性能影响以及兼容性等方面。...

    SQL Server数据类型char、nchar、varchar、nvarchar的区别浅析

    在SQL Server数据库中,字符数据类型的选择对于存储和查询数据的效率及空间占用至关重要。...理解这些数据类型之间的差异,有助于我们在设计数据库表结构时做出合理的选择,优化存储和查询性能,从而提高整体系统效率。

    oracle中varchar2(byte)和varchar2(char).doc

    在Oracle数据库中,`VARCHAR2`是最常用的字符数据类型之一,用于存储变长的字符串。然而,在定义`VARCHAR2`类型时,可以选择指定长度为`BYTE`或`CHAR`。这两种方式看似细微的差别,实际上却对数据存储、性能优化以及...

    MySQL中CHAR和VARCHAR类型演变和详解

    MySQL中的CHAR和VARCHAR是两种常见的字符串数据类型,用于存储文本数据。它们在数据库设计和优化中扮演着重要的角色,理解它们的区别和使用场景至关重要。 首先,让我们深入了解一下两者的演变。在MySQL 5.0.3之前...

    MYSQL中 char 和 varchar的区别

    在MySQL数据库中,CHAR和VARCHAR是两种常用的字符串数据类型,它们在存储和处理字符串时有显著的区别。理解这些差异对于优化数据库性能和节省存储空间至关重要。 首先,CHAR和VARCHAR都是预定义长度的数据类型,但...

    MySQL中VARCHAR与CHAR格式数据的区别

    在MySQL数据库中,CHAR和VARCHAR是两种常见的字符串数据类型,它们在存储和处理方式上有着显著的区别,这对于数据库设计和性能优化至关重要。 首先,CHAR是一种固定长度的数据类型。这意味着无论你存储的实际数据有...

    MySQL数据库char与varchar的区别分析及使用建议

    MySQL数据库中的`CHAR`和`VARCHAR`是两种常见的字符型数据类型,它们在存储和处理方式上有显著区别,对数据库性能和存储空间有着直接影响。理解它们的差异对于优化数据库设计至关重要。 `CHAR`数据类型是固定长度的...

    mysql中char与varchar的区别分析

    在MySQL数据库中,字符类型`CHAR`和`VARCHAR`是两种常见的用于存储文本数据的字段类型,它们在存储方式和空间效率上有着显著的区别。...通过合理的数据类型选择,可以优化数据库的性能和存储效率。

    区分数据类型的文档

    ### 数据类型区分:Char与Varchar2 在数据库设计中,正确选择合适的数据类型对于优化存储空间和提高查询性能至关重要。本文将详细介绍两种常见字符数据类型——`Char`和`Varchar2`的区别,并给出在何种情况下应选择...

    浅析Oracle中char和varchar2的区别

    在Oracle数据库中,数据类型是数据结构的基础,用于定义...理解并熟练运用这些数据类型和相关函数,对于优化Oracle数据库的性能和管理至关重要。在实际工作中,应根据项目的具体需求来决定最适合的数据类型和操作方式。

    MySQL中字段类型char、varchar和text的区别

    在MySQL数据库中,字段类型的选择...综上所述,理解并正确选择`char`、`varchar`和`text`字段类型对于优化MySQL数据库性能至关重要。在设计数据库结构时,应根据数据特性和需求谨慎选择,以实现最佳的存储和查询效率。

    varChar和Char之间的区别?

    合理选择数据类型不仅可以优化存储空间,还可以提高查询效率,对数据库的性能优化起到关键作用。因此,当设计数据库表结构时,应根据数据的特性和业务需求,谨慎选择`char`、`varchar`、`text`、`nchar`或`nvarchar`...

    char的几种类型

    选择合适的数据类型对于优化数据库性能和空间利用至关重要。例如,当存储英文名时,由于英文字符占一个字节,可以选择VARCHAR;而存储中文名时,由于每个中文字符占两个字节,更适合使用NVARCHAR,以确保正确地存储...

    SQL SERVER的数据类型自定义

    ### SQL Server 数据类型详解与自定义数据类型创建 ...通过合理选择和自定义数据类型,不仅可以优化数据存储,还能提升数据处理的性能和安全性。希望本文能帮助你更好地理解和应用SQL Server中的数据类型功能。

    MySql Oracle SqlServer三大数据库的数据类型列表.pdf

    MySQL、Oracle 和 SQL Server 是三大主流的关系型数据库管理系统,它们都拥有各自的数据类型来支持不同的数据存储需求。数据类型的选择直接影响到数据的存储、检索和处理效率,因此了解这些数据库的数据类型列表至关...

Global site tag (gtag.js) - Google Analytics