Php 如何在MySQL中存储欧洲货币?
在我处理的一个新项目中,我有CSV格式的数据要导入mysql表。其中一列是价格字段,用于存储欧洲格式的货币,即345,83。Php 如何在MySQL中存储欧洲货币?,php,sql,mysql,Php,Sql,Mysql,在我处理的一个新项目中,我有CSV格式的数据要导入mysql表。其中一列是价格字段,用于存储欧洲格式的货币,即345,83。 我的问题是存储这个十进制分隔符。在大多数欧洲货币中,小数分隔符是“,”但当我尝试在字段中插入一个十进制数(例如345,83)时,我会得到以下错误:“在行“row”处截断列“column_name”的数据”。如果我使用“.”而不是“,”则效果很好。您可以帮助我,如何在mysql中存储此格式吗?您可以将货币字段导入VARCHAR列,然后将此列复制到DECIMAL列中,同时使用
我的问题是存储这个十进制分隔符。在大多数欧洲货币中,小数分隔符是“,”但当我尝试在字段中插入一个十进制数(例如345,83)时,我会得到以下错误:“在行“row”处截断列“column_name”的数据”。如果我使用“.”而不是“,”则效果很好。您可以帮助我,如何在mysql中存储此格式吗?您可以将货币字段导入
VARCHAR
列,然后将此列复制到DECIMAL
列中,同时使用mysql字符串操作函数将所有行中的,
替换为
UPDATE <<table>>
SET <<decimal-currency-col>> = REPLACE(<<varchar-currency-col>>, ',', '.');
更新
集合=替换(,,,,,);
某些数据类型没有直接的
SQL Server与SQL Server之间的关联
Access和MySQL。一个例子是
货币数据类型:MySQL不支持
(尚未)具有货币数据类型,但
使用定义创建列
十进制(19,4)也有同样的作用。
而MSSQL默认为Unicode
字符类型,如nCHAR和
nVARCHAR、MySQL没有那么紧密
将字符集绑定到字段类型,
而是允许一组
可以绑定到的字符类型
任意数量的字符集,
包括Unicode
从使用或,它与您所输入的内容基本相同。您可以将其作为常规十进制字段存储在数据库中,并在显示时设置数字的格式 编辑:刚刚添加了一个如何实现的示例
$european_numbers = array('123.345,78', '123 456,78', ',78');
foreach($european_numbers as $number) {
echo "$number was converted to ".convert_european_to_decimal($number)."\n";
// save in database now
}
function convert_european_to_decimal($number) {
// i am sure there are better was of doing this, but this is nice and simple example
$number = str_replace('.', '', $number); // remove fullstop
$number = str_replace(' ', '', $number); // remove spaces
$number = str_replace(',', '.', $number); // change comma to fullstop
return $number;
}
你也可以考虑将它乘以100,并将其存储为INT.
在将价格插入数据库之前:$price = (int)$price*100;
收到DB的价格后:
$price = number_format($price, 2, ',', ' ');
比你想象的还要糟糕。在欧洲,数字1234.56可以写成:
在.net中,数字解析器可以根据给定的区域性工作,因此,如果您知道格式,它将为您完成艰巨的工作。我相信你可以找到一个PHP等价物,这会为你节省很多麻烦。@S.Gehrig:正确,但考虑到OP使用的是PHP,这有点过分了。这取决于:如果OP需要在MySQL端进行一些计算(例如一些累计),他必须以适当的数据类型存储这些值。请注意money_format()在windows上未定义systems@Thilo. 是的,我认为在这种情况下它应该是一个点,因为它似乎是十进制分隔符。在英国,我们使用逗号作为千位分隔符,小数点作为小数点,例如1250.25,而法国和其他欧洲国家使用逗号作为千位分隔符,例如1.250,00。只是为了澄清一下——这不完全是mysql的问题,而是关于解析欧洲数字的问题?如果你把这个列作为一个double,你就会知道该怎么做。正如我所理解的OP,这正是他试图做的,但是失败了,因为MySQL使用点作为十进制分隔符。不能在十进制列中使用逗号存储值。
$price = number_format($price, 2, ',', ' ');