MySQL数据库大小VS varchar长度

时间:2014-12-29 10:33:13

标签: mysql database varchar

假设有一个包含varchar字段的表,如下所示:

CREATE TABLE IF NOT EXISTS `users` (
  `name` varchar(150) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

MySQL数据库大小是否依赖于varchar长度?我的意思是:当我将用户插入表中时,数据库大小是否会增加150个字节,与实际的条目内容无关?或者它取决于有效的数据大小(如果我插入" abc"作为用户名,数据库仅增加3个字节)?在决定varchar lenght时是否有最佳实践?

2 个答案:

答案 0 :(得分:4)

不,不完全。

大多数常见的关系数据库使用称为“页面”的概念,这是一定大小的存储块。在这些页面中,然后存储行。根据其定义,varchar字段仅占用字符串实际所需的存储空间,但可能需要或可能不需要新页面来包含其行。此外,在删除行时,添加和修改的间隙将显示在页面中,直到表格被优化或重复使用。这一切都很正常,因为DBMS本身在大多数情况下都能在内部保持高效。

总结:字段大小和数据库大小之间存在松散的关系,但数据库显然大于任何给定时间点的数据总和是正常的。但是,在大多数引擎中,具有10个字符数据的varchar(150)将不会使用超过大约11个字节(取决于编码,并且包括尾随零)。

至于最佳做法:是的,varchar的大小应该“合理地能够包含其域的最大可能字符串”。 varchar(1024)FirstName字段没有意义,而varchar(16)City不起作用。使用常识,存储无关紧要。

答案 1 :(得分:1)

  

VARCHAR值在存储时不会填充。存储和检索值时,将保留尾随空格,符合标准SQL。

Documentation