只是为了澄清,通过指定诸如Varchar(45)之类的内容意味着最多需要45个字符?我记得几年前我从某人那里听说,括号中的数字并不是指角色的数量,然后这个人试图向我解释一些我不理解和忘记的非常复杂的东西。

Char和Varchar有什么区别?我确实搜索了一些搜索,看到Char为您提供了列的最大值,如果您的数据大小固定并使用VARCHAR,则最好使用它。

但是,如果它为您提供了本列的所有数据的最大列的最大值,那么当数据大小变化时,使用它会更好吗?特别是如果您不知道数据大小将有多大。 varchar需要指定大小(炭真的不需要吗?),难道不是很麻烦吗?

有帮助吗?

解决方案

您还必须用 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 只能存储(固定大小)值。

其他提示

MySQL文档 很好地解释了各种数据类型的存储要求。

特别是对于长度为l的字符串 CHAR(M) 数据类型将占用(M XC)字节(其中C是存储字符所需的字节数...这取决于使用中的字符)。一个 VARCHAR(M) 根据M是<= 255还是> 255,将占用(L + 1)或(L + 2)。

因此,这实际上取决于您期望弦乐的时间,长度的变化将是什么。

NB:该文档没有讨论字符集对A的存储要求的影响 VARCHAR 类型。我试图准确地引用它,但是我的猜测是,您还需要将字符串长度乘以字节宽度,以获取存储要求。

如果您的表中只有1个可变长度字段,例如VARCHAR或文本,Char和Varchar实际上就变得无关紧要。 MySQL将自动将所有字符更改为Varchar。

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

例如,如果您从表限制10中进行选择 *,则MySQL必须扫描表文件中的第十个记录。这意味着要找到每个记录的末尾,直到找到第十张记录的末尾。但是,如果您的表具有固定的长度/尺寸记录,MySQL只需要知道记录大小,然后跳过10 x #bytes即可。

如果您知道一列将包含一个少量的固定炭,则使用char,否则使用varchar。炭柱填充到最大长度。

VARCHAR的开销很小(根据RDBMS的不同),但仅使用开销 +存储的Chars的实际数量。

对于这些值,您知道它们将是恒定的,例如,对于电话号码,邮政编码等,当然可以使用“ char”。

您不记得的复杂内容是45是指字节,而不是字符。如果您使用的是多键字符编码,则不一样。在Oracle中,您可以明确指定字节或字符。

varchar2(45 BYTE)

或者

varchar2(45 CHAR)

字节和char列中的差异

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top