【发布时间】:2011-03-28 02:46:04
【问题描述】:
我一直在为我的应用程序制作“产品对象”并且我一直在设置属性,当我突然进入价格属性并偶然发现它时,我质疑选择哪种类型更好?我知道,对于 PHP 来说这无关紧要,但对于 MySQL 来说它确实如此。
有什么建议吗?
【问题讨论】:
标签: php mysql string oop double
我一直在为我的应用程序制作“产品对象”并且我一直在设置属性,当我突然进入价格属性并偶然发现它时,我质疑选择哪种类型更好?我知道,对于 PHP 来说这无关紧要,但对于 MySQL 来说它确实如此。
有什么建议吗?
【问题讨论】:
标签: php mysql string oop double
实数类型更适合数字,因为您可以与它们进行适当的比较(例如,价格 677),然后除以 100,然后再将数字呈现给用户。这样就可以得到数据库中的数字运算,得到精度(假设 1 美分的精度就足够了)。
【讨论】:
都不合适。
价格应存储为 DECIMAL 或 INT,因为它们有固定的小数点数。使用浮点数不是一个好主意,因为值会四舍五入。字符串是有问题的,因为您无法进行比较。
【讨论】:
在this SO question 中有对此问题的“最佳实践”解决方案的详细说明。使用整数也是一种可接受的选择。无论如何,最好在整个应用程序中使用相同的解决方案,以便于比较和算术。
请记住,在将数据呈现给用户之前,您始终可以使用number_format() 或其他方式更改数据的外观。
【讨论】:
在考虑字符串或数字(int、double 等)数据类型时,我总是问自己的问题是,“我要对它们进行数学运算吗?”如果答案是肯定的,我必须假设它是你的情况,我会选择数值。如果答案是否定的,我选择字符串值。
【讨论】:
根据您提供的信息,最好只使用整数,这样您就可以使用数值而不是字符串值进行排序和查询。 int 会比浮点数更好,因为它不会有奇怪的半美分问题。
即,您不希望 6.77 大于 12.54,也不希望价格为 6.4312313141 的东西。
【讨论】:
我个人更喜欢将整数存储为分值,650 而不是 6.50。 易于排序,没有舍入问题,并且易于以任何格式显示给您的用户。
【讨论】:
您可能想查看 sourceforge 上的 Time and Money 项目。完全披露:我实际上并没有仔细研究过这个项目,但它似乎会给你一些关于处理此类事情的好主意。
【讨论】: