RC.*_*RC. 28
检查:Varchar的参考
简而言之,除非你在VARCHAR中超过255的大小,否则它将需要另一个字节作为长度前缀.
长度表示存储在列中的数据的约束多于其他任何约束.这固有地限制了列的MAXIMUM存储大小.恕我直言,长度应该对数据有意义.如果您存储社会保障#,将长度设置为128是没有意义的,即使您实际存储的所有内容都是SSN,也不会花费任何存储空间.
Dan*_*plo 17
选择小于最大值且与性能无关的值有很多正当理由.设置大小有助于指示您正在存储的数据类型,也可以作为最后一种验证形式.
例如,如果您要存储英国邮政编码,那么您只需要8个字符.设置此限制有助于清除您正在存储的数据类型.如果你选择了255个字符,那就会让事情变得混乱.
我不了解mySQL,但在SQL Server中,它将允许您定义字段,使得使用的总字节数大于实际可以存储在记录中的字节总数.这是件坏事.迟早你会得到一个达到限制的行,你不能插入数据.
设计数据库结构以考虑行大小限制要好得多.
此外,是的,您不希望人们在最大值应为10的字段中放置200个字符.如果这样做,则几乎总是坏数据.
你说,我可以在应用程序级别限制它.但是数据不会仅从一个应用程序进入数据库.有时多个应用程序使用它,有时会导入数据,有时会从查询窗口手动修复(例如,更新所有记录以便将价格加10%).如果这些其他数据源中的任何一个都不知道您在应用程序中放置的规则,那么您的数据库中将包含错误的无用数据.必须在数据库级别强制执行数据完整性(这不会阻止您在尝试输入数据之前进行检查)或者您没有完整性.另外,根据我的经验,懒得设计数据库的人往往也懒得将限制放到应用程序中,根本就没有数据完整性检查.
他们对没有数据完整性的数据库说了一句话 - 没用.