MySQL中VARCHAR和CHAR之间有什么区别?
我正在尝试存储MD5哈希值。
答案 0 :(得分:320)
VARCHAR
是可变长度的。
CHAR
是固定长度。
如果您的内容是固定尺寸,那么使用CHAR
可以获得更好的效果。
有关详细说明,请参阅CHAR and VARCHAR Types上的MySQL页面(请务必阅读评论)。
答案 1 :(得分:202)
答案 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)
VARCHAR 存储长度可变的字符串,并且是最常见的字符串数据类型。它可能需要的存储空间少于 固定长度类型,因为它仅使用所需的空间 (即,使用较少的空间来存储较短的值)。例外是 使用ROW_FORMAT = FIXED创建的MyISAM表,使用固定数量 每行磁盘空间的大小,因此可能浪费空间。 VARCHAR帮助 性能,因为它节省了空间。
CHAR 是固定长度的:MySQL总是为指定数量的字符分配足够的空间。当存储CHAR值时,MySQL 删除所有尾随空格。 (MySQL中的VARCHAR也是如此。 4.1和更早的版本-CHAR和VAR CHAR在逻辑上是相同的,仅在存储格式上有所区别。) 比较所需。
答案 11 :(得分:0)
字符
VARCHAR
答案 12 :(得分:-4)
Char
具有固定长度(支持2000个字符),它代表字符是数据类型
Varchar
具有可变长度(支持4000个字符)
答案 13 :(得分:-5)
Char或varchar-用于输入文本数据,其中长度可以用括号表示 例如,名字char(20)
答案 14 :(得分:-10)
CHAR:
VARCHAR:
任何评论...... !!!!