数据库数据类型大小
只是为了澄清,通过指定类似VARCHAR(45)的字符表示最多可能需要45个字符?我记得几年前我从别人那里听说,括号中的数字并不是指字符的号码,那么这个人试图向我解释一些我不明白和已经忘记的复杂的东西。数据库数据类型大小
CHAR和VARCHAR有什么区别?我搜索了一下,看到CHAR给出了列大小的最大值,如果数据具有固定的大小,最好使用它,如果数据大小不同,则使用VARCHAR。
但是,如果它给你这个列的所有数据列的大小的最大值,当你的数据大小变化时使用它不是更好吗?特别是如果你不知道你的数据量有多大。 VARCHAR需要指定大小(CHAR真的不需要对吗?),这不是更麻烦吗?
您还必须使用CHAR
指定尺寸。使用CHAR
时,列值将填充空格以填充您指定的大小,而使用VARCHAR
时,只会存储指定的实际值。
例如:
CREATE TABLE test (
char_value CHAR(10),
varchar_value VARCHAR(10)
);
INSERT INTO test VALUES ('a', 'b');
SELECT * FROM test;
以上将选择 “A ” 为char_value
和 “B” 为varchar_value
如果所有的值都差不多大小,CHAR
可能是更好的选择,因为它往往需要比VARCHAR
更少的存储空间。这是因为VARCHAR
存储了值的长度和值本身,而CHAR
只能存储(固定大小)值。
它是怎么回事?比如说,我在varchar(255)中存储1个字节。所以,我有2个字节作为总长度。而字符将占用255个字节 – 2010-03-30 07:26:38
是的,但是说在这种情况下你有varchar(2)与char(2),char(2)将是两个字节,varchar(2)将是3个字节。 – 2010-03-30 08:26:45
我喜欢这个清晰的例子,谢谢! – yeeen 2010-03-30 16:24:17
MySQL documentation很好地解释了各种数据类型的存储需求。
特别是,对于长度为L的字符串,CHAR(M)
数据类型将占用(M xc)个字节(其中c是存储字符所需的字节数......这取决于正在使用的字符集) 。 根据M是否为< = 255或> 255,A VARCHAR(M)
将占用(L + 1)或(L + 2)。
所以,这实际上取决于你期望你的字符串有多长,长度的变化是多少。
注意:文档没有讨论字符集对VARCHAR
类型的存储要求的影响。我试图准确地引用它,但我的猜测是,您需要将字符串长度乘以字符字节宽度以获得存储要求。
如果您知道一列中将包含一个小的,固定数量的字符使用CHAR,否则使用varchar。 CHAR列被填充到最大长度。
VARCHAR有一个小开销(取决于RDBMS的4-8字节),但只使用开销+存储的实际字符数。
对于您知道的值,它们将保持不变,例如电话号码,邮政编码等,确保使用“char”是最佳选择。
你不记得的复杂的东西是45指的是字节,而不是字符。如果您使用多字节字符编码,则不一样。在Oracle中,您可以明确指定字节或字符。
varchar2(45 BYTE)
或
varchar2(45 CHAR)
CHAR和VARCHAR竟变得无关紧要,如果你只有1可变长度字段在表中,像一个varchar或文本。 Mysql会自动将所有字符更改为varchar。
固定长度/大小记录可以为您提供额外的性能,但不能使用任何可变长度字段类型。原因是,它会更快,更容易找到下一个记录的MySQL。
例如,如果您执行SELECT * FROM表LIMIT 10,则mysql必须扫描表文件中的第十条记录。这意味着要找到每个记录的结尾,直到找到第10条记录的结尾。但是如果你的表有固定长度/大小的记录,mysql只需要知道记录大小,然后跳过10 x#字节。
相关问题: - http://stackoverflow.com/questions/758699/is-the-char-datatype-in-sql-obsolete-when-do-you-use-it – 2010-03-30 03:38:19