4

我在 MySQL 中存储值时遇到了一个非常奇怪的问题。前提:

我有一个DECIMAL(15,8)用于存储货币值的表(如订单总额),但是当我尝试插入时,例如:

2,45545345

这被存储为

2.00000000

我尝试了 MySQL 的 FORMAT/CAST 函数,但输出仍然相同。

这是生成查询的方式:

$db->query("INSERT INTO `random_table_name` SET currency_value = '" . floatval($value) . "'");

我也试过了doubleval,但结果一样。有趣的是,虽然同样的一段代码在几周前运行良好,但我不记得对 db 结构或 db 类可能导致这种情况的任何更改。

4

2 回答 2

8

使用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

这是执行此操作的适当方法,替代方法是(如下所示)执行 a str_replace(',', '.'),但每次要输出字符串时都必须执行相反的操作。

但是还有另一个选项,您可以将 MySQL 语言环境设置为en_US.

于 2013-01-21T08:25:09.200 回答
3

在插入数据库之前替换,为:.

$value = str_replace( ',', '.', $value);

这将创建一个有效的数字,可以安全地插入到数据库中。或者只是将它添加到您的查询中:

INSERT INTO `random_table_name` SET currency_value = '" . str_replace( ',', '.', $value ) . "'
于 2013-01-21T08:29:26.387 回答