2009-11-24 53 views
18

如果我有一个表被声明为接受varchar(100),然后我实际插入单词“你好”多少实际存储将被用于MySQL服务器?即使声明了varchar(100),插入的NULL也会导致不使用存储吗?在mysql中使用varchar(100)声明有多少实存储空间?

答案是什么,它是否与不同的数据库实现一致?

回答

15

如果我有一个字段的表,其 被声明为接受VARCHAR(100) 然后我实际上插入单词 “你好”有多少实际存储将在MySQL服务器上使用 ?

Mysql将存储5个字节加上一个字节的长度。如果varchar大于255,那么它将存储2个字节的长度。

请注意,这取决于列的字符集。如果字符集是utf8,则mysql将需要每个字符最多3个字节。一些存储引擎(即存储器)将总是要求字符集的每个字符的最大字节长度。

另外将NULL结果在 插入没有存储使用即使 VARCHAR(100)被声明?

创建列可为空意味着mysql将不得不为每行多达8个可为空的列预留额外的字节。这被称为“空掩码”。

答案是什么?它是否与不同的数据库实现一致?

它在MySQL中的存储引擎之间甚至不一致!

+0

请注意,这些数字是为MyISAM表格。 InnoDB或其他引擎可能有其他要求。另请参阅:http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html – johannes 2009-11-24 14:58:18

+0

所以不管我们对varchar数据类型设置了多少限制。对? – 2015-06-16 03:07:21

13

这真的取决于你的桌子上的字符集。

相反CHAR,VARCHAR值 被存储作为一个字节或两个字节的长度 前缀加数据。前缀长度 指示值中的字节数 。如果值不超过 255个字节,则列使用一个长度 字节,如果值 可能需要超过255个字节,则使用两个长度字节。

- source

UTF-8往往需要比 编码一个或几个 语言作出更多的空间。带有 的变音符号和其他字符 字母脚本通常在适当的 多字节编码中每个字符需要一个 字节,但在编码为 的UTF-8中需要两个字符。东亚文字一般 在其多字节编码 的每个字符中有两个字节,但在UTF-8中每个字符需要三个 字节。

- source

+0

非常感谢,正是我想知道的。 – Benj 2009-11-24 14:48:33

+0

这不回答有关空值的问题。 – 2009-11-24 14:48:38

+0

是的,但源链接特别解释了VARCHAR字段的字节要求,并给出了使用空字符串的示例。我觉得值得为他阅读。 – 2009-11-24 14:53:47

2

VARCHAR只保存用途是什么,而焦炭店字节的定数。

0

对于一些罕见的语言,Utf16有时需要较少的数据,然后是utf8,我不知道哪些是罕见的。

伙计们,可以选择使用COMPRESSed MySql中的表吗?就像在Apache中一样。非常感谢