varchar()子句中指定的数字是什么意思?
题
只是为了澄清,通过指定诸如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)