访问MySQL奇怪的价格字段

问题描述:

我正在开发使用ms-access数据库的应用程序的新版本,因为它变得太慢了。 所以我决定使用MySQL作为数据库。我很满意我的选择。 问题是我有一个庞大的数据库充满了价格。该价格在旧应用程序中正确显示,但在我的数据库中显示如下:'26,.000000.00''71,9.00000.00''24,9.00000.00'。 该字段是访问MySQL奇怪的价格字段

'price' VARCHAR(255) NOT NULL DEFAULT '0', 

我不知道如何解决这个问题。这是因为数据类型还是因为应用程序非常糟糕?

+0

您是如何将Access数据传输到MySQL的? – 2011-05-03 14:22:04

+0

我曾经使用过一次razor sql和一次bullzip ms访问mysql。相同的结果。 – Simone 2011-05-03 14:31:42

我认为你应该使用正确的数据类型来存储这些值,如果你试图存储价格(金钱),那么你应该使用十进制数据类型。

这是个什么文件说:

定点(准确值)类型

的decimal和numeric类型存储精确的数值数据。使用这些类型时,重要的是要保留精确的精度,例如使用货币数据。在MySQL中,NUMERIC被实现为DECIMAL,所以关于DECIMAL的以下评论同样适用于NUMERIC。

你可以阅读更多关于这一点,在这里:http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html

+0

尝试将类型更改为“最小结果”,例如“截断不正确的值”。这不是我存储的数据,而是我必须恢复的数据。 – Simone 2011-05-03 14:29:36

+0

我想知道如何解释这个数字26,.000000.00,显然也许你会失去一些零,这就是为什么你的数据必须被截断。 – PachinSV 2011-05-03 17:28:02

我不知道如何解决这个问题。这是因为数据类型还是因为应用程序非常糟糕?

问题应该是数据类型。这thread将帮助您选择一个。

另外,您可能会希望将您的列转换为十进制(或其他数字)类型。 它是这样

  • 添加所需 类型的新列,ALTER TABLE herpderp add new_price Decimal (19,4)
  • 从旧柱填充它(你需要一个 方便的功能,您 字符串转换为数字)update herpderp set new_price = handy_function(price)
  • 删除旧列ALTER TABLE herpderp DROP COLUMN price
  • 新列 重命名为旧名称ALTER TABLE herpderp CHANGE COLUMN new_price price
+0

这是我正在寻找的答案!谢谢! – Simone 2011-05-03 14:38:21

+0

Simone,我很高兴它有帮助 – bpgergo 2011-05-03 14:44:47