在我正在处理的新项目中,我将CSV格式的数据导入到mysql表中。其中一列是以欧洲格式存储货币的价格字段,即。 345,83。 我有的是存储这个十进制分隔符。在大多数欧洲货币中,十进制分隔符是“,”但是当我尝试在字段中插入十进制数字(例如345,83)时,我收到以下错误:“数据在行'行'列'column_name'被截断# “”。如果我使用'。'而不是','它工作正常。你能帮我一下,如何在mysql中存储这种格式?
答案 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_format或money_format,这几乎是您的喜好。
答案 2 :(得分:3)
这比你想象的要糟糕。数字1234.56
可以在欧洲写成:
在.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);