VARCHAR和CHAR有什么区别?

时间:2009-12-11 03:32:32

标签: sql mysql

MySQL中VARCHAR和CHAR之间有什么区别?

我正在尝试存储MD5哈希值。

15 个答案:

答案 0 :(得分:320)

VARCHAR是可变长度的。

CHAR是固定长度。

如果您的内容是固定尺寸,那么使用CHAR可以获得更好的效果。

有关详细说明,请参阅CHAR and VARCHAR Types上的MySQL页面(请务必阅读评论)。

答案 1 :(得分:202)

CHAR

  1. 用于存储固定长度的字符串值。
  2. 最大数量数据类型可容纳的字符数为 255个字符
  3. 比VARCHAR 快50%
  4. 使用静态内存分配
  5. VARCHAR

    1. 用于存储可变长度字母数字数据。
    2. 此数据类型可以容纳的最大值
      • MySQL 5.0.3之前版本: 255个字符
      • Post-MySQL 5.0.3: 65,535个字符共享该行。
    3. 比CHAR强
    4. 使用动态内存分配*

答案 2 :(得分:113)

CHAR Vs VARCHAR

CHAR用于固定长度尺寸变量
VARCHAR用于可变长度大小变量。

E.g。

Create table temp
(City CHAR(10),
Street VARCHAR(10));

Insert into temp
values('Pune','Oxford');

select length(city), length(street) from temp;

输出

length(City)          Length(street)
10                    6

结论:要有效地使用存储空间,必须使用VARCHAR而不是CHAR,如果变量长度是可变的

答案 3 :(得分:62)

CHAR(x)列只能包含完全 x个字符 VARCHAR(x)列可以包含最多 x个字符。

由于您的MD5哈希值总是相同,因此您应该使用CHAR

但是,您不应该首先使用MD5;它有已知的弱点 改用SHA2 如果您正在使用哈希密码,则应使用bcrypt。

答案 4 :(得分:9)

如果输入的字符短于声明的长度,则varchar会截断尾随空格,而char则不会。 Char将填充空格并始终是声明长度的长度。在效率方面,varchar更擅长修剪字符以允许更多调整。但是,如果你知道char的确切长度,char将以更快的速度执行。

答案 5 :(得分:8)

  

MySQL中VARCHAR和CHAR之间有什么区别?

对于已经给出的答案,我想补充一点,在OLTP系统或频繁更新的系统中,考虑使用CHAR即使对于可变大小的列,因为更新期间可能会出现VARCHAR列碎片

  

我正在尝试存储MD5哈希值。

如果安全真的很重要,那么MD5哈希不是最佳选择。但是,如果您将使用任何哈希函数,请考虑使用BINARY类型(例如,MD5将生成16字节哈希,因此对于32个字符,BINARY(16)将足够代替CHAR(32)十六进制数字。这将节省更多空间并提高性能。

答案 6 :(得分:6)

在今天的大多数RDBMS中,它们都是同义词。但是,对于仍有区别的系统,CHAR字段存储为固定宽度列。如果将其定义为CHAR(10),则会向表中写入10个字符,其中“填充”(通常为空格)用于填充数据未用完的任何空间。例如,保存“bob”将保存为(“bob”+7个空格)。 VARCHAR(可变字符)列用于存储数据,而不会浪费CHAR列所需的额外空间。

与往常一样,Wikipedia说得更响亮。

答案 7 :(得分:4)

CHAR是一个固定长度的字段; VARCHAR是一个可变长度字段。如果您存储的字符串具有可变长度(如名称),则使用VARCHAR,如果长度始终相同,则使用CHAR,因为它的尺寸效率稍高,而且速度稍快。

答案 8 :(得分:2)

CHAR是固定长度,VARCHAR是可变长度。 CHAR每个条目总是使用相同数量的存储空间,而VARCHAR仅使用存储实际文本所需的数量。

答案 9 :(得分:2)

char是固定长度的字符数据类型,varchar是可变长度的字符数据类型。

因为char是固定长度的数据类型,所以char值的存储大小等于此列的最大大小。由于varchar是可变长度数据类型,因此varchar值的存储大小是输入数据的实际长度,而不是此列的最大大小。

当列中的数据条目大小相同时,可以使用char。 当列中的数据条目的大小变化很大时,可以使用varchar。

答案 10 :(得分:0)

根据High Performance MySQL本书:

  

VARCHAR 存储长度可变的字符串,并且是最常见的字符串数据类型。它可能需要的存储空间少于   固定长度类型,因为它仅使用所需的空间   (即,使用较少的空间来存储较短的值)。例外是   使用ROW_FORMAT = FIXED创建的MyISAM表,使用固定数量   每行磁盘空间的大小,因此可能浪费空间。 VARCHAR帮助   性能,因为它节省了空间。

     

CHAR 是固定长度的:MySQL总是为指定数量的字符分配足够的空间。当存储CHAR值时,MySQL   删除所有尾随空格。 (MySQL中的VARCHAR也是如此。   4.1和更早的版本-CHAR和VAR CHAR在逻辑上是相同的,仅在存储格式上有所区别。)   比较所需。

答案 11 :(得分:0)

字符

  • CHAR 是固定长度的字符串数据类型,因此字段中的任何剩余空间都用空格填充。
  • CHAR 每个字符占用 1 个字节。因此,一个 CHAR(100) 字段(或变量)在磁盘上占用 100 个字节,而不管它包含什么字符串。

VARCHAR

  • VARCHAR 是一种可变长度字符串数据类型,因此它只保存您分配给它的字符。
  • VARCHAR 每个字符占用 1 个字节,+ 2 个字节用于保存长度信息(例如,如果您设置 VARCHAR(100) 数据类型 = 'Dhanika',则它将占用 7 个字节(对于 D、H、 A、N、I、K 和 A)加上 2 个字节,或总共 9 个字节。)

答案 12 :(得分:-4)

Char具有固定长度(支持2000个字符),它代表字符是数据类型

Varchar具有可变长度(支持4000个字符)

答案 13 :(得分:-5)

Char或varchar-用于输入文本数据,其中长度可以用括号表示 例如,名字char(20)

答案 14 :(得分:-10)

CHAR:

  • 支持Character&号。
  • 支持2000个字符。
  • 固定长度。

VARCHAR:

  • 支持Character&号。
  • 支持4000个字符。
  • 可变长度。

任何评论...... !!!!