如何在MySQL中存储欧洲货币?

时间:2009-07-13 08:26:21

标签: php sql mysql

在我正在处理的新项目中,我将CSV格式的数据导入到mysql表中。其中一列是以欧洲格式存储货币的价格字段,即。 345,83。 我有的是存储这个十进制分隔符。在大多数欧洲货币中,十进制分隔符是“,”但是当我尝试在字段中插入十进制数字(例如345,83)时,我收到以下错误:“数据在行'行'列'column_name'被截断# “”。如果我使用'。'而不是','它工作正常。你能帮我一下,如何在mysql中存储这种格式?

7 个答案:

答案 0 :(得分:13)

您可以将其存储为数据库中的常规十进制字段,并在显示时格式化欧洲风格的数字

编辑:刚刚添加了一个如何实现的示例

$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;
}

答案 1 :(得分:4)

使用number_formatmoney_format,这几乎是您的喜好。

答案 2 :(得分:3)

这比你想象的要糟糕。数字1234.56可以在欧洲写成:

  1. 1234,56
  2. 1 234,56(空格作为小组分隔符)
  3. 1.234,56(点作为组分隔符)
  4. 在.net中,数字解析器可以根据给定的文化进行工作,因此如果你知道它的格式,它就会为你付出艰苦的努力。我相信你可以找到一个等价的PHP,它可以为你节省很多麻烦。

答案 3 :(得分:1)

您可以将货币字段导入VARCHAR列,然后将此列复制到DECIMAL列,同时使用MySQL将所有行中的,替换为.字符串处理函数。

UPDATE <<table>>
    SET <<decimal-currency-col>> = REPLACE(<<varchar-currency-col>>, ',', '.');

答案 4 :(得分:0)

  

某些数据类型没有直接数据   SQL Server或。之间的关联   访问和MySQL。一个例子是   CURRENCY数据类型:MySQL没有   (还)有CURRENCY数据类型,但是   使用定义创建列   DECIMAL(19,4)也有同样的目的。   而MSSQL默认为Unicode   字符类型,如nCHAR和   nVARCHAR,MySQL并不那么紧   将字符集绑定到字段类型,   而是允许一组   可以绑定的字符类型   任意数量的字符集,   包括Unicode。

来自http://dev.mysql.com/tech-resources/articles/migrating-from-microsoft.html

答案 5 :(得分:0)

您还可以考虑将其乘以100并将其存储为INT。

在将价格插入数据库之前:

$price = (int)$price*100;

从DB收到价格后:

$price = number_format($price, 2, ',', ' ');

答案 6 :(得分:-1)

Try replacing the "," with "."?

$price = str_replace(",", ".", $price);