首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VARCHAR()子句中指定的数字是什么意思?

问在VARCHAR()子句中指定的数字是什么意思?
EN

Stack Overflow用户
提问于 2010-03-30 10:57:45
回答 6查看 3.5K关注 0票数 4

只是为了澄清一下,通过指定像VARCHAR( 45 )这样的东西意味着它最多可以包含45个字符?我记得几年前我听一个人说括号里的数字不是指字符数,然后那个人试图向我解释一些我不理解的复杂的东西,但我已经忘记了。

CHAR和VARCHAR之间的区别是什么?我确实搜索了一下,看到CHAR给出了列大小的最大值,如果数据大小固定,最好使用它,如果数据大小不同,则使用VARCHAR。

但是,如果它给出了该列所有数据的列大小的最大值,那么当您的数据大小发生变化时,使用它不是更好吗?尤其是当你不知道你的数据会有多大的时候。VARCHAR需要指定大小(CHAR不是真的需要,对吧?),这不是更麻烦吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-30 11:10:06

您还必须使用CHAR指定大小。使用CHAR时,列值将使用空格填充您指定的大小,而使用VARCHAR时,仅存储您指定的实际值。

例如:

代码语言:javascript
复制
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只能存储(固定大小)值。

票数 3
EN

Stack Overflow用户

发布于 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类型存储需求的影响。我试图准确地引用它,但我猜您还需要将字符串长度与字符字节宽度相乘,才能获得存储需求。

票数 3
EN

Stack Overflow用户

发布于 2010-03-30 18:41:37

如果表中只有一个可变长度的字段,比如varchar或text,那么char和varchar实际上就变得无关紧要了。Mysql会自动将所有字符更改为varchar。

固定长度/大小的记录可以为您提供额外的性能,但您不能使用任何可变长度字段类型。原因是mysql可以更快、更容易地找到下一条记录。

例如,如果您执行SELECT * FROM table LIMIT 10,那么mysql必须在表文件中扫描第十条记录。这意味着找到每条记录的末尾,直到找到第10条记录的末尾。但是,如果您的表有固定长度/大小的记录,mysql只需要知道记录的大小,然后跳过10x#字节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2542601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档