Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MySQL中使用VARCHAR实现一切!(小型或微型站点)_Php_Mysql_Types_Sqldatatypes - Fatal编程技术网

Php 在MySQL中使用VARCHAR实现一切!(小型或微型站点)

Php 在MySQL中使用VARCHAR实现一切!(小型或微型站点),php,mysql,types,sqldatatypes,Php,Mysql,Types,Sqldatatypes,我试图寻找这个问题,因为我觉得这是一个常见的初学者问题,但我只能找到几乎能回答这个问题的东西 我们有一个小型PHP应用程序,最多有5个人使用(总共,有史以来),可能有2个人同时使用,所以可伸缩性不是一个问题 然而,我仍然喜欢以最佳实践的方式做事,否则坏习惯会形成永久性的坏习惯,并溢出到您编写的代码中,而这些代码所面对的不仅仅是5个人 在这种情况下,我的问题是:对于一个不断发展/变化的小型PHP应用程序,除了在MySQL中使用VARCHAR(250+)之外,还有什么强有力的理由吗?如果我选择INT

我试图寻找这个问题,因为我觉得这是一个常见的初学者问题,但我只能找到几乎能回答这个问题的东西

我们有一个小型PHP应用程序,最多有5个人使用(总共,有史以来),可能有2个人同时使用,所以可伸缩性不是一个问题

然而,我仍然喜欢以最佳实践的方式做事,否则坏习惯会形成永久性的坏习惯,并溢出到您编写的代码中,而这些代码所面对的不仅仅是5个人

在这种情况下,我的问题是:对于一个不断发展/变化的小型PHP应用程序,除了在MySQL中使用VARCHAR(250+)之外,还有什么强有力的理由吗?如果我选择INT,但后来需要包含字符,那么当我可以对其进行未来验证并使其成为VARCHAR时,必须返回并更改它会很烦人。换句话说,对于小型应用程序来说,选择除VARCHAR之外的任何字符数较大的应用程序似乎都是毫无意义的限制。这是正确的吗


感谢您的阅读和可能的回答

如果在
VARCHAR
中有数字1到12,并且需要按数字顺序排列,则得到1,10,11,12,2,3,4,5,6,7,8,9。可以吗?好的,您可以在SQL中通过说
orderbycol+0
来修复它。您喜欢这种混乱吗?

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

VARCHAR与表内联存储,当大小合理时,这会加快速度


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

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

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

$someVar = intval($someVar);

在PHP中执行算术运算之前,否则PHP将假定123是一个字符串。

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

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

另外,当使用正确的类型时,可以很容易地添加额外的约束;年龄在110岁以下;开始日期是否小于结束日期;索引是否是另一个表中的现有值


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

CHAR比VARCHAR占用更多空间时,会因为额外的容量而影响性能。很难选择将哪个注释标记为回答我问题的注释,但这条注释为我做到了。谢谢。谢谢,我发现这是一个有趣的关于VARCHAR vs INT的“明白”了。我从没想过这是一个潜在的问题!我真的不明白你的例子是否证明在任何地方都可以使用VARCHAR。如果列的用途很明确,并且它的内容应该是数字而不是一些数字代码,那么为什么您希望它是VARCHAR?为什么您希望该列存储其他内容?也许我只是看不出你所说的是哪种小项目会演变到如此程度,以至于改变专栏的目的。与应用程序的运行时间和维护时间相比,开发某个东西所需的时间微不足道。第一次全面正确地做这件事