MySQL中的VARCHAR和CHAR有什么区别?
我正在尝试存储MD5哈希值 .
VARCHAR 是可变长度的 .
VARCHAR
CHAR 是固定长度 .
CHAR
如果您的内容是固定大小,那么使用 CHAR 可以获得更好的效果 .
有关详细说明,请参阅CHAR and VARCHAR Types上的MySQL页面(请务必阅读注释) .
用于存储 fixed length 的字符串值 .
最大号码数据类型可以容纳的字符是 255 characters .
它是 50% faster 而不是VARCHAR .
使用 static memory allocation .
用于存储 variable length 字母数字数据 .
此数据类型可容纳的最大值为
Pre-MySQL 5.0.3: 255 characters .
Post-MySQL 5.0.3: 65,535 characters 共享该行 .
这是 slower 而不是CHAR .
使用 dynamic memory allocation* .
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,如果变量长度是可变的
CHAR(x) 列只能包含 x 个字符 .VARCHAR(x) 列最多可包含 x 个字符 .
CHAR(x)
x
VARCHAR(x)
由于你的MD5哈希值总是相同,你应该使用 CHAR .
但是,您不应该首先使用MD5;它已知缺点 .请改用SHA2 .如果您正在哈希密码,则应使用bcrypt .
如果输入的字符短于声明的长度,则Varchar会截断尾随空格,而char则不会 . Char将填充空格,并且始终是声明长度的长度 . 在效率方面,varchar更擅长修剪字符以允许更多调整 . 但是,如果您知道char的确切长度,char将以更快的速度执行 .
要查看有关此内容的更多详细信息,请查看:
http://www.allthingsdiscussed.com/More/Difference-between-char-and-varchar-in-mysql
MySQL中VARCHAR和CHAR之间有什么区别?
为了给出答案,我想补充一点,在OLTP系统或频繁更新的系统中,考虑使用 CHAR 甚至是可变大小的列,因为更新期间可能存在 VARCHAR 列碎片 .
如果安全性非常重要,MD5哈希不是最佳选择 . 但是,如果您将使用任何散列函数,请考虑使用 BINARY 类型(例如,MD5将产生16字节散列,因此对于代表十六进制数字的32个字符, BINARY(16) 将足够而不是 CHAR(32) . 这将节省更多空间并提高性能 .
BINARY
BINARY(16)
CHAR(32)
在今天的大多数RDBMS中,它们都是同义词 . 但是,对于仍有区别的系统,CHAR字段存储为固定宽度列 . 如果将其定义为CHAR(10),则会向表中写入10个字符,其中“填充”(通常为空格)用于填充数据未用完的任何空间 . 例如,保存“bob”将保存为(“bob”7个空格) . VARCHAR(可变字符)列用于存储数据,而不会浪费CHAR列所需的额外空间 .
一如既往,Wikipedia说得更响 .
CHAR是固定长度的字段; VARCHAR是一个可变长度字段 . 如果您存储的字符串具有可变长度(如名称),则使用VARCHAR,如果长度始终相同,则使用CHAR,因为它的尺寸效率稍高,而且速度稍快 .
CHAR是固定长度,VARCHAR是可变长度 . CHAR每个条目始终使用相同数量的存储空间,而VARCHAR仅使用存储实际文本所需的数量 .
char是固定长度的字符数据类型,varchar是可变长度的字符数据类型 .
由于char是固定长度的数据类型,因此char值的存储大小等于此列的最大大小 . 由于varchar是可变长度数据类型,因此varchar值的存储大小是输入数据的实际长度,而不是此列的最大大小 .
当列中的数据条目预期大小相同时,可以使用char . 当列中的数据条目的大小变化很大时,可以使用varchar .
根据High Performance MySQL书:
VARCHAR存储可变长度字符串,是最常见的字符串数据类型 . 它可以比固定长度需要更少的存储空间类型,因为它只使用所需的空间(即,使用较少的空间来存储较短的值) . 例外情况是使用ROW_FORMAT = FIXED创建的MyISAM表,它在磁盘上为每行使用固定数量的空间,因此可能浪费空间 . VARCHAR有助于提高性能,因为它节省了空间 . CHAR是固定长度的:MySQL总是为指定的字符数分配足够的空间 . 存储CHAR值时,MySQL会删除任何尾随空格 . (对于MySQL 4.1和旧版本中的VARCHAR也是如此 - CHAR和VAR CHAR在逻辑上是相同的,仅在存储格式上有所不同 . )根据需要使用空格填充值进行比较 .
Char 具有固定长度(支持2000个字符),它代表字符是数据类型
Char
Varchar 具有可变长度(支持4000个字符)
Varchar
Char或varchar-用于输入文本数据,其中长度可以在括号中表示Eg- name char(20)
CHAR :
支持字符和数字 .
支持2000个字符 .
固定长度 .
VARCHAR :
支持4000个字符 .
可变长度 .
任何意见......!!!!
14 回答
VARCHAR
是可变长度的 .CHAR
是固定长度 .如果您的内容是固定大小,那么使用
CHAR
可以获得更好的效果 .有关详细说明,请参阅CHAR and VARCHAR Types上的MySQL页面(请务必阅读注释) .
CHAR
用于存储 fixed length 的字符串值 .
最大号码数据类型可以容纳的字符是 255 characters .
它是 50% faster 而不是VARCHAR .
使用 static memory allocation .
VARCHAR
用于存储 variable length 字母数字数据 .
此数据类型可容纳的最大值为
Pre-MySQL 5.0.3: 255 characters .
Post-MySQL 5.0.3: 65,535 characters 共享该行 .
这是 slower 而不是CHAR .
使用 dynamic memory allocation* .
CHAR Vs VARCHAR
CHAR用于固定长度大小变量
VARCHAR用于可变长度大小变量 .
例如 .
输出将是
结论:要有效地使用存储空间,必须使用VARCHAR而不是CHAR,如果变量长度是可变的
CHAR(x)
列只能包含x
个字符 .VARCHAR(x)
列最多可包含x
个字符 .由于你的MD5哈希值总是相同,你应该使用
CHAR
.但是,您不应该首先使用MD5;它已知缺点 .
请改用SHA2 .
如果您正在哈希密码,则应使用bcrypt .
如果输入的字符短于声明的长度,则Varchar会截断尾随空格,而char则不会 . Char将填充空格,并且始终是声明长度的长度 . 在效率方面,varchar更擅长修剪字符以允许更多调整 . 但是,如果您知道char的确切长度,char将以更快的速度执行 .
要查看有关此内容的更多详细信息,请查看:
http://www.allthingsdiscussed.com/More/Difference-between-char-and-varchar-in-mysql
为了给出答案,我想补充一点,在OLTP系统或频繁更新的系统中,考虑使用
CHAR
甚至是可变大小的列,因为更新期间可能存在VARCHAR
列碎片 .如果安全性非常重要,MD5哈希不是最佳选择 . 但是,如果您将使用任何散列函数,请考虑使用
BINARY
类型(例如,MD5将产生16字节散列,因此对于代表十六进制数字的32个字符,BINARY(16)
将足够而不是CHAR(32)
. 这将节省更多空间并提高性能 .在今天的大多数RDBMS中,它们都是同义词 . 但是,对于仍有区别的系统,CHAR字段存储为固定宽度列 . 如果将其定义为CHAR(10),则会向表中写入10个字符,其中“填充”(通常为空格)用于填充数据未用完的任何空间 . 例如,保存“bob”将保存为(“bob”7个空格) . VARCHAR(可变字符)列用于存储数据,而不会浪费CHAR列所需的额外空间 .
一如既往,Wikipedia说得更响 .
CHAR是固定长度的字段; VARCHAR是一个可变长度字段 . 如果您存储的字符串具有可变长度(如名称),则使用VARCHAR,如果长度始终相同,则使用CHAR,因为它的尺寸效率稍高,而且速度稍快 .
CHAR是固定长度,VARCHAR是可变长度 . CHAR每个条目始终使用相同数量的存储空间,而VARCHAR仅使用存储实际文本所需的数量 .
char是固定长度的字符数据类型,varchar是可变长度的字符数据类型 .
由于char是固定长度的数据类型,因此char值的存储大小等于此列的最大大小 . 由于varchar是可变长度数据类型,因此varchar值的存储大小是输入数据的实际长度,而不是此列的最大大小 .
当列中的数据条目预期大小相同时,可以使用char . 当列中的数据条目的大小变化很大时,可以使用varchar .
根据High Performance MySQL书:
Char
具有固定长度(支持2000个字符),它代表字符是数据类型Varchar
具有可变长度(支持4000个字符)Char或varchar-用于输入文本数据,其中长度可以在括号中表示Eg- name char(20)
CHAR :
支持字符和数字 .
支持2000个字符 .
固定长度 .
VARCHAR :
支持字符和数字 .
支持4000个字符 .
可变长度 .
任何意见......!!!!