Answers:
VARCHAR
是可变长度的。
CHAR
是固定长度。
如果您的内容是固定大小,则使用可获得更好的效果CHAR
。
有关详细说明,请参见CHAR和VARCHAR类型的MySQL页面(请确保还阅读注释)。
Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions.
CHAR与VARCHAR
CHAR用于定长大小变量
VARCHAR用于定长大小变量。
例如
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
一CHAR(x)
列只能有完全相同的 x
字符。
一VARCHAR(x)
列可以有多达 x
字符。
由于您的MD5哈希值始终相同,因此您可能应该使用CHAR
。
但是,您不应该首先使用MD5。它具有已知的弱点。
请改用SHA2。
如果您对密码进行哈希处理,则应使用bcrypt。
MySQL中的VARCHAR和CHAR有什么区别?
对于已经给出的答案,我想补充一下,在OLTP系统或频繁更新的系统中,考虑使用CHAR
甚至用于可变大小的列,因为VARCHAR
更新期间可能会出现列碎片。
我正在尝试存储MD5哈希值。
如果安全真的很重要,则MD5哈希不是最佳选择。但是,如果您将使用任何哈希函数,请考虑BINARY
使用它的类型(例如,MD5将产生16字节的哈希值,这样BINARY(16)
就足够了,而不是CHAR(32)
用于表示十六进制数字的32个字符。这将节省更多空间并提高性能。
CHAR是固定长度的字段;VARCHAR是一个可变长度字段。如果存储的字符串的长度具有非常大的可变性(例如名称),请使用VARCHAR,如果长度始终相同,则请使用CHAR,因为它的大小效率更高,并且速度也更快。
根据高性能MySQL的书:
VARCHAR存储长度可变的字符串,并且是最常见的字符串数据类型。与固定长度类型相比,它可能需要更少的存储空间,因为它只使用所需的空间(即,使用更少的空间来存储较短的值)。例外是使用ROW_FORMAT = FIXED创建的MyISAM表,该表在磁盘上为每一行使用固定数量的空间,因此可能浪费空间。VARCHAR可以 节省空间,因此有助于提高性能。
CHAR是固定长度的:MySQL总是为指定数量的字符分配足够的空间。存储CHAR值时,MySQL会删除所有尾随空格。(在MySQL 4.1和更早版本中,VARCHAR也是这样-CHAR和VAR CHAR在逻辑上是相同的,只是存储格式有所不同。)值用比较所需的空格填充。
VARCHAR
需要在需要时动态分配内存,从而降低了性能,而不是CHAR
,对吗?
Char
具有固定长度(支持2000个字符),代表字符是数据类型
Varchar
具有可变长度(支持4000个字符)
Char或varchar-用于输入文本数据,其长度可以在方括号中表示。例如,char(20)
(
和)
是括号,而不是括号。
(
和)
支架,以及许多英国人可能甚至不知道,有英语的方言中的单词“括号”可以指一个标点符号。有一个很强的理由倾向于“括号”而不是“括号”-总的来说,在面向国际程序员群体时,它是最大明确的选择-但是,比“括号”错误更复杂。