一切都在 MySQL 中使用 VARCHAR! (在小型或微型网站上)

Using VARCHAR in MySQL for everything! (on small or micro sites)

我试着搜索这个,因为我觉得这是一个初学者的常见问题,但我只能找到 几乎 回答的内容。

我们有一个小型 PHP 应用程序,最多供 5 人(总共,曾经)使用,可能有 2 人同时使用,因此可扩展性不是问题。

但是,我仍然喜欢以最佳实践的方式做事,否则坏习惯会形成永久性的坏习惯,并蔓延到您编写的面向不止 5 个人的代码中。

鉴于这种情况,我的问题是:是否有充分的理由在 MySQL 中使用除 VARCHAR(250+) 之外的任何其他内容,用于不断 evolving/changing 的小型 PHP 应用程序]?如果我选择了 INT 但后来需要包含字符,那么当我可以对它进行未来验证并使其成为 VARCHAR 开始时,不得不返回并更改它会很烦人。换句话说,选择除 VARCHAR 以外的任何字符数大的字符似乎对小型应用程序毫无意义。这是正确的吗?

感谢阅读并尽可能回答!

如果您在 VARCHAR 中有 1 到 12 的数字,并且您需要按数字顺序排列它们,您会得到 1,10,11,12,2,3,4,5,6,7, 8,9。那样行吗?嗯,你 可以 通过说 ORDER BY col+0 在 SQL 中修复它。你喜欢那种拼凑吗?

您可能已经知道 VARCHAR 列是可变长度的字符串。使用 VARCHAR 时,我们具有动态内存分配的优势。

VARCHAR 与 table 内联存储,当大小合理时速度更快。

如果您的应用需要性能,您可以使用比 VARCHAR 快一点的 CHAR。

养成习惯可能不是一个好主意,因为任何实际数据量都会变得低效。如果您使用文本类型,则用于相同数据量的存储量 space 将因您的存储引擎而异。

如果您按照建议操作,请不要忘记所有通常为数字类型的值都需要在 PHP 中转换为数字类型。例如,如果您将值“123”存储为 varchar 或文本类型并将其检索为 $someVar,您将必须执行以下操作:

$someVar = intval($someVar);

在PHP之前可以进行算术运算,否则PHP会认为123是一个字符串。

主要缺点之一是您必须在代码中添加一致性检查。对于小型私有数据库,没问题。但是对于更大的项目...

使用正确的类型会自动进行大量检查。例如,值中是否有错误的字符;日期是否有效...

作为奖励,在使用正确的类型时很容易添加额外的约束;年龄小于 110 岁;开始日期小于结束日期;索引是另一个 table 中的现有值吗?

我更喜欢让类型尽可能具体。虽然服务器错误可能很严重且难以调试,但它比拥有不一致的数据库要好得多。