MySQL中的VARCHAR和CHAR有什么区别?
我正在尝试存储MD5哈希。
MySQL中的VARCHAR和CHAR有什么区别?
我正在尝试存储MD5哈希。
当前回答
Char或varchar-用于输入文本数据,长度可以用括号表示 Eg- name char (20)
其他回答
如果输入的字符比声明的长度短,Varchar将截断尾随空格,而char则不会。Char将填充空格,并且始终是声明的长度。在效率方面,varchar更熟练,因为它修剪字符,允许更多的调整。但是,如果您知道char的确切长度,则char将以更快的速度执行。
VARCHAR是可变长度的。
CHAR是固定长度。
如果您的内容是固定大小的,那么使用CHAR将获得更好的性能。
请参阅MySQL页面上关于CHAR和VARCHAR类型的详细解释(一定要阅读注释)。
一个CHAR(x)列只能有x个字符。 一个VARCHAR(x)列最多可以有x个字符。
由于你的MD5哈希值总是相同的大小,你可能应该使用CHAR。
然而,你不应该首先使用MD5;它的弱点是众所周知的。 请改用SHA2。 如果要对密码进行哈希,则应该使用bcrypt。
区分这两者对完整性方面也有好处。
如果你希望存储有长度规则的东西,比如yes或no,那么你可以使用char(1)来存储Y或n。对于货币代码也很有用,你可以使用char(3)来存储像USD, EUR或AUD这样的东西。
varchar更适合那些除了限制长度之外没有一般规则的情况。它适用于名称或描述之类的东西,在这些地方,值的长度会有很多变化。
然后出现了文本数据类型,并在工作中使用了扳手(尽管它通常只是没有定义上限的varchar)。
根据高性能MySQL书:
VARCHAR stores variable-length character strings and is the most common string data type. It can require less storage space than fixed-length types, because it uses only as much space as it needs (i.e., less space is used to store shorter values). The exception is a MyISAM table created with ROW_FORMAT=FIXED, which uses a fixed amount of space on disk for each row and can thus waste space. VARCHAR helps performance because it saves space. CHAR is fixed-length: MySQL always allocates enough space for the specified number of characters. When storing a CHAR value, MySQL removes any trailing spaces. (This was also true of VARCHAR in MySQL 4.1 and older versions—CHAR and VAR CHAR were logically identical and differed only in storage format.) Values are padded with spaces as needed for comparisons.