我在 MySQL 中存储值时遇到了一个非常奇怪的问题。前提:
我有一个表使用 DECIMAL(15,8)
来存储货币值(比如订单总额),但是当我尝试插入例如:
2,45545345
这存储为
2.00000000
我尝试了 MySQL 的 FORMAT/CAST 函数,但输出仍然相同。
查询是这样生成的:
$db->query("INSERT INTO `random_table_name` SET currency_value = '" . floatval($value) . "'");
我也尝试了 doubleval
,但结果相同。有趣的是,虽然同一段代码在几周前运行良好,但我不记得对数据库结构或数据库类进行的任何更改可能会导致此问题。
最佳答案
使用number_format将 ,
替换为 .
像这样:
number_format($value, 8, '.') // 8 = number of decimals, . = decimal separator
但是,您的问题似乎与当前语言环境有关。您需要查看以下内容:setlocale()和 localeconv
setlocale(LC_ALL, 'en_US'); // NOT TESTED, read up on the appropriate syntax
这是执行此操作的适当方法,另一种方法是(如下所示)执行 str_replace(',', '.')
,但您必须执行相反的操作每次你想输出字符串。
不过还有另一种选择,您可以将 MySQL 语言环境设置为 en_US
。
关于PHP float/double 存储为 MySQL DECIMAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14434762/