MySQL:为什么使用VARCHAR(20)而不是VARCHAR(255)?

caw*_*caw 30 mysql database varchar types

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

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

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

size(字节)=长度+ 1

因此,如果在VARCHAR(255)字段中有"示例"一词,则它将具有8个字节.如果你在VARCHAR(20)字段中有它,它也会有8个字节.有什么不同?

我希望你能帮助我.提前致谢!

RC.*_*RC. 28

检查:Varchar的参考

简而言之,除非你在VARCHAR中超过255的大小,否则它将需要另一个字节作为长度前缀.

长度表示存储在列中的数据的约束多于其他任何约束.这固有地限制了列的MAXIMUM存储大小.恕我直言,长度应该对数据有意义.如果您存储社会保障#,将长度设置为128是没有意义的,即使您实际存储的所有内容都是SSN,也不会花费任何存储空间.

  • @NIMISHAN (20) 是您将在表中插入的字符串的长度。假设社会安全号码是 9 位数字,因此其长度为 9,可以轻松放入数据类型 VARCHAR(20) 的列中,但在 VARCHAR(2) 中会导致错误 (3认同)

Dan*_*plo 17

选择小于最大值且与性能无关的值有很多正当理由.设置大小有助于指示您正在存储的数据类型,也可以作为最后一种验证形式.

例如,如果您要存储英国邮政编码,那么您只需要8个字符.设置此限制有助于清除您正在存储的数据类型.如果你选择了255个字符,那就会让事情变得混乱.

  • +1如果您决定使用VAR(8)获取英国邮政编码,请使用CHAR(8)表示性能:) (5认同)

HLG*_*GEM 5

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

设计数据库结构以考虑行大小限制要好得多.

此外,是的,您不希望人们在最大值应为10的字段中放置200个字符.如果这样做,则几乎总是坏数据.

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

他们对没有数据完整性的数据库说了一句话 - 没用.