我在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类的任何变化都可能导致这种情况。
答案 0 :(得分: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
这是执行此操作的合适方式,替代方法(如下所示),执行str_replace(',', '.')
,但每次要输出字符串时都必须执行相反操作。
还有另一种选择,您可以将MySQL语言环境设置为en_US
。
答案 1 :(得分:3)
在插入db:
之前,将,
替换为.
$value = str_replace( ',', '.', $value);
这将创建一个有效的数字,可以安全地插入到数据库中。或者只是在查询中添加它:
INSERT INTO `random_table_name` SET currency_value = '" . str_replace( ',', '.', $value ) . "'