在 MYSQL 中,您可以为 VARCHAR 字段类型选择长度。可能的值为 1-255。
但是,如果使用最大值的 VARCHAR(255) 而不是 VARCHAR(20),它的优势是什么?据我所知,条目的大小仅取决于插入字符串的实际长度。
大小(字节)= 长度+1
因此,如果您在 VARCHAR(255) 字段中有单词“Example”,它将有 8 个字节。如果将它放在 VARCHAR(20) 字段中,它也将有 8 个字节。有什么不同?
我希望你能帮助我。提前致谢!
在 MYSQL 中,您可以为 VARCHAR 字段类型选择长度。可能的值为 1-255。
但是,如果使用最大值的 VARCHAR(255) 而不是 VARCHAR(20),它的优势是什么?据我所知,条目的大小仅取决于插入字符串的实际长度。
大小(字节)= 长度+1
因此,如果您在 VARCHAR(255) 字段中有单词“Example”,它将有 8 个字节。如果将它放在 VARCHAR(20) 字段中,它也将有 8 个字节。有什么不同?
我希望你能帮助我。提前致谢!
查看:Varchar 参考
简而言之,除非您在 VARCHAR 中超过 255 的大小,否则没有太大区别,这将需要另一个字节作为长度前缀。
长度表示对存储在列中的数据的约束比其他任何约束都多。这也固有地限制了列的最大存储大小。恕我直言,长度应该对数据有意义。如果您存储一个社会保障号,那么将长度设置为 128 是没有意义的,即使如果您实际存储的只是一个 SSN,它不会花费您任何存储空间。
选择小于最大值且与性能无关的值有很多正当理由。设置大小有助于指示您存储的数据类型,也可以作为最后的验证形式。
例如,如果您要存储英国邮政编码,那么您只需要 8 个字符。设置此限制有助于明确您存储的数据类型。如果您选择 255 个字符,那只会使事情变得混乱。
我不了解 mySQL,但在 SQL Server 中,它可以让您定义字段,以便使用的字节总数大于实际可以存储在记录中的字节总数。这是一件坏事。迟早你会得到一个达到限制的行并且你不能插入数据。
设计数据库结构以考虑行大小限制要好得多。
此外,是的,您不希望人们将 200 个字符放在最大值应该为 10 的字段中。如果他们这样做,它几乎总是坏数据。
你说,我可以在应用程序级别限制它。但是数据不会仅仅从一个应用程序进入数据库。有时多个应用程序使用它,有时导入数据,有时从查询窗口手动修复(例如更新所有记录以增加 10% 的价格)。如果这些其他数据源中的任何一个不了解您在应用程序中设置的规则,那么您的数据库中就会有糟糕的、无用的数据。必须在数据库级别强制执行数据完整性(这不会阻止您在尝试输入数据之前进行检查),否则您就没有完整性。另外,根据我的经验,那些懒得设计数据库的人通常也懒得真正将限制放入应用程序中,根本没有数据完整性检查。
他们对没有数据完整性的数据库有一个词——没用。
存在语义上的区别(我相信这是唯一的区别):如果您尝试将 30 个非空格字符填充到 varchar(20) 中,则会产生错误,而 varchar(255) 会成功。所以它主要是一个额外的约束。
好吧,如果您想允许更大的条目,或者可能限制条目大小。
例如,您可能将 first_name 作为 VARCHAR 20,但可能将 street_address 作为 VARCHAR 50,因为 20 可能没有足够的空间。同时,您可能希望控制该值的大小。
换句话说,您已经设置了特定值的上限,理论上可以防止表(以及可能的索引/索引条目)变得太大。
您也可以只使用固定宽度的 CHAR,但与可以更小的 VARCHAR 不同,CHAR 填充值(尽管这可以加快 SQL 访问速度。
从数据库性能的角度来看,我不相信会有区别。
但是,我认为很多关于使用长度的决定归结为您要完成的工作和记录系统以仅接受它需要的数据。