MySQL中的VARCHAR和CHAR有什么区别?
我正在尝试存储MD5哈希。
VARCHAR是可变长度的。
VARCHAR
CHAR是固定长度。
CHAR
如果你的内容是固定大小的,使用CHAR你会得到更好的性能。
详细的解释请参见CHAR和VARCHAR类型上的MySQL页面(一定要阅读注释)。
一个CHAR(x)列只能有完全 x字符 VARCHAR(x)列可以有到 x字符
CHAR(x)
x
VARCHAR(x)
由于你的MD5哈希值总是相同的大小,你可能应该使用CHAR。
CHAR是固定长度,VARCHAR是可变长度。CHAR总是对每个条目使用相同数量的存储空间,而VARCHAR只使用存储实际文本所需的空间。
char是一种定长字符数据类型,varchar是一种变长字符数据类型。
由于char是一种固定长度的数据类型,因此char值的存储大小等于此列的最大大小。因为varchar是一种变长数据类型,所以varchar值的存储大小是输入数据的实际长度,而不是该列的最大大小。
当一个列中的数据条目希望具有相同的大小时,可以使用char。 当一个列中的数据条目预计在大小上有很大变化时,可以使用varchar
CHAR是一个固定长度的字段;VARCHAR是一个变长字段。如果您存储的字符串长度变化很大,例如名称,则使用VARCHAR,如果长度总是相同,则使用CHAR,因为它的大小效率略高,也略快。
在今天的大多数rdbms中,它们是同义词。然而,对于那些仍然有区别的系统,CHAR字段被存储为固定宽度的列。如果将其定义为CHAR(10),则将向表中写入10个字符,其中“填充”(通常是空格)用于填充数据未使用完的任何空间。例如,保存“bob”将被保存为(“bob”+7个空格)。VARCHAR(变量字符)列用于存储数据,而不像CHAR列那样浪费额外的空间。
一如既往,维基百科说话更响亮。
CHAR Vs 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来有效地利用存储空间
如果输入的字符比声明的长度短,Varchar将截断尾随空格,而char则不会。Char将填充空格,并且始终是声明的长度。在效率方面,varchar更熟练,因为它修剪字符,允许更多的调整。但是,如果您知道char的确切长度,则char将以更快的速度执行。
对于已经给出的答案,我想补充一点,在OLTP系统或频繁更新的系统中,即使对于可变大小的列,也要考虑使用CHAR,因为在更新期间可能会出现VARCHAR列碎片。
如果安全性真的很重要,MD5哈希并不是最好的选择。然而,如果你要使用任何哈希函数,请考虑使用BINARY类型来代替它(例如,MD5将产生16字节哈希,因此BINARY(16)就足够了,而不是CHAR(32),用于表示十六进制数字的32个字符。这将节省更多空间并提高性能。
BINARY
BINARY(16)
CHAR(32)
Char或varchar-用于输入文本数据,长度可以用括号表示 Eg- name char (20)
< em >字符:< / em >
< em > VARCHAR: < / em >
任何评论 ......!!!!
Char有一个固定的长度(支持2000个字符),它代表字符是一种数据类型
Char
Varchar具有可变长度(支持4000个字符)
Varchar
根据高性能MySQL书:
VARCHAR存储变长字符串,是最常见的字符串数据类型。它需要的存储空间比 固定长度的类型,因为它只使用所需的空间 (即,更少的空间用于存储更短的值)。例外是 使用ROW_FORMAT=FIXED创建的MyISAM表,使用固定的数量 磁盘上每一行的空间不足,因此会浪费空间。VARCHAR帮助 .性能,因为它节省空间 字符是固定长度的:MySQL总是为指定数量的字符分配足够的空间。当存储一个CHAR值时,MySQL 删除任何尾随空格。(MySQL中的VARCHAR也是如此 4.1和旧版本- CHAR和VAR CHAR在逻辑上是相同的,仅在存储格式上有所不同。)值用空格填充
VARCHAR存储变长字符串,是最常见的字符串数据类型。它需要的存储空间比 固定长度的类型,因为它只使用所需的空间 (即,更少的空间用于存储更短的值)。例外是 使用ROW_FORMAT=FIXED创建的MyISAM表,使用固定的数量 磁盘上每一行的空间不足,因此会浪费空间。VARCHAR帮助 .性能,因为它节省空间
字符是固定长度的:MySQL总是为指定数量的字符分配足够的空间。当存储一个CHAR值时,MySQL 删除任何尾随空格。(MySQL中的VARCHAR也是如此 4.1和旧版本- CHAR和VAR CHAR在逻辑上是相同的,仅在存储格式上有所不同。)值用空格填充
字符
区分这两者对完整性方面也有好处。
如果你希望存储有长度规则的东西,比如yes或no,那么你可以使用char(1)来存储Y或n。对于货币代码也很有用,你可以使用char(3)来存储像USD, EUR或AUD这样的东西。
varchar更适合那些除了限制长度之外没有一般规则的情况。它适用于名称或描述之类的东西,在这些地方,值的长度会有很多变化。
然后出现了文本数据类型,并在工作中使用了扳手(尽管它通常只是没有定义上限的varchar)。