可能的重复:
对所有基于文本的字段使用通用 varchar(255) 是否有缺点?

在 MYSQL 中,您可以选择 VARCHAR 字段类型的长度。可能的值为 1-255。

但是如果使用最大的VARCHAR(255)而不是VARCHAR(20)有什么优势呢?据我所知,条目的大小仅取决于插入字符串的实际长度。

大小(字节)= 长度+1

因此,如果 VARCHAR(255) 字段中有单词“Example”,那么它将有 8 个字节。如果将其放在 VARCHAR(20) 字段中,那么它也将具有 8 个字节。有什么不同?

我希望你可以帮助我。提前致谢!

有帮助吗?

解决方案

退房:用于varchar的参考

在短期没有太大的区别,除非你去的255在您的VARCHAR规模,这将需要长度前缀另一个字节。

长度表示更存储在比任何其他列中的数据的约束的。这在本质上限制了该列的最大存储大小为好。恕我直言,长度应有意义相对于数据。如果您的存储社会保障#这是没有意义的设置长度为128,即使它不花费你任何东西在存储,如果你实际存储是一个SSN。

其他提示

有是选择比不相关的性能最大小的值很多正当的理由。设置大小有助于指示要存储的数据的类型,并且还也可以作为验证的最后时刻的形式。

例如,如果要存储英国邮政编码那么只需要8个字符。设置这个限制有助于明确的数据要存储类型。如果您选择了255个字符,它只是混淆的问题。

我不了解 mySQL,但在 SQL Server 中,它允许您定义字段,使使用的总字节数大于实际可以存储在记录中的字节总数。这是一件坏事。迟早你会得到一行达到限制并且无法插入数据。

设计数据库结构时最好考虑行大小限制。

另外,是的,您不希望人们在最大值应为 10 的字段中输入 200 个字符。如果这样做,那么几乎总是坏数据。

你说,好吧,我可以在应用程序级别限制它。但数据并不仅仅从一个应用程序进入数据库。有时多个应用程序使用它,有时导入数据,有时从查询窗口手动修复(例如更新所有记录以增加 10% 的价格)。如果这些其他数据源中的任何一个不了解您在应用程序中放置的规则,那么您的数据库中将会有错误的、无用的数据。必须在数据库级别强制执行数据完整性(这不会​​阻止您在尝试输入数据之前进行检查),否则就没有完整性。另外,根据我的经验,那些懒得设计数据库的人通常也懒得将限制实际放入应用程序中,并且根本没有数据完整性检查。

他们对没有数据完整性的数据库有一个词——无用。

有一个语义差别(我相信这是唯一的区别):如果你试图填补30个非空格字符为VARCHAR(20),它会产生一个错误,而它会为VARCHAR(255)成功。因此它主要是一个附加的约束。

好了,如果你想允许更大的条目,或者限制进入的大小。

例如,可能必须如first_name作为VARCHAR 20,但也许STREET_ADDRESS作为VARCHAR 50自20可能没有足够的空间。与此同时,你可能希望控制该值可以是多大得到的。

在换句话说,已设置的特定值可以有多大的顶棚,理论上以防止表(和潜在的索引/索引条目)过于庞大。

您可以只使用其中CHAR是一个固定的宽度为好,但不像VARCHAR,其可以更小,CHAR焊盘的值(尽管这使得更快SQL访问。

从数据库的角度来看演出

聪明,我不相信有将是一个区别。

不过,我想了很多关于使用长度决定归结为你想什么来完成和记录系统接受它需要不仅仅是数据。

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