只是为了澄清一下,通过指定像VARCHAR( 45 )这样的东西意味着它最多可以包含45个字符?我记得几年前我听一个人说括号里的数字不是指字符数,然后那个人试图向我解释一些我不理解的复杂的东西,但我已经忘记了。
CHAR和VARCHAR之间的区别是什么?我确实搜索了一下,看到CHAR给出了列大小的最大值,如果数据大小固定,最好使用它,如果数据大小不同,则使用VARCHAR。
但是,如果它给出了该列所有数据的列大小的最大值,那么当您的数据大小发生变化时,使用它不是更好吗?尤其是当你不知道你的数据会有多大的时候。VARCHAR需要指定大小(CHAR不是真的需要,对吧?),这不是更麻烦吗?
发布于 2010-03-30 11:10:06
您还必须使用CHAR指定大小。使用CHAR时,列值将使用空格填充您指定的大小,而使用VARCHAR时,仅存储您指定的实际值。
例如:
CREATE TABLE test (
char_value CHAR(10),
varchar_value VARCHAR(10)
);
INSERT INTO test VALUES ('a', 'b');
SELECT * FROM test;以上将为char_value选择"a“,为varchar_value选择"b”。
如果所有值的大小都相同,则CHAR可能是更好的选择,因为它通常比VARCHAR需要更少的存储空间。这是因为VARCHAR存储值的长度和值本身,而CHAR只能存储(固定大小)值。
发布于 2010-03-30 11:10:58
MySQL documentation很好地解释了各种数据类型的存储需求。
特别是,对于长度为L的字符串,CHAR(M)数据类型将占用(M X c)个字节(其中c是存储字符所需的字节数...这取决于使用的字符集)。根据M是<=255还是>255,VARCHAR(M)将占用(L + 1)或(L + 2)。
所以,这真的取决于你期望的字符串的长度,长度的变化。
注:文档没有讨论字符集对VARCHAR类型存储需求的影响。我试图准确地引用它,但我猜您还需要将字符串长度与字符字节宽度相乘,才能获得存储需求。
发布于 2010-03-30 18:41:37
如果表中只有一个可变长度的字段,比如varchar或text,那么char和varchar实际上就变得无关紧要了。Mysql会自动将所有字符更改为varchar。
固定长度/大小的记录可以为您提供额外的性能,但您不能使用任何可变长度字段类型。原因是mysql可以更快、更容易地找到下一条记录。
例如,如果您执行SELECT * FROM table LIMIT 10,那么mysql必须在表文件中扫描第十条记录。这意味着找到每条记录的末尾,直到找到第10条记录的末尾。但是,如果您的表有固定长度/大小的记录,mysql只需要知道记录的大小,然后跳过10x#字节。
https://stackoverflow.com/questions/2542601
复制相似问题