【发布时间】:2018-02-23 23:32:43
【问题描述】:
我最近从 MySQL 迁移到 MariaDB,我的价格下降了小数点后两位。我进行了检查,价格列的类型设置为小数(19,4),这样如果需要,我可以有四个小数点的准确性。
- 使用 select 语句登录 MariaDB,价格还可以。
- 用heidisql登录也显示价格还可以。
- 查看使用我尝试使用的相同 ODBC 连接的链接表也是正确的。
所以我得出结论,通过 ADO 和 ODBC 连接器进行连接是有问题的。
我看了看,发现如果我将我的 sql 语句转换为小数(6,2),那么小数会正确显示,所以我直接在 mariadb 中重新转换了表格。
但是我注意到所有价格都显示正确,除了小数位有两个零的价格。
值为 5.00,我返回的是 0.05
我不确定我哪里出错了,但这意味着任何整数或零都不会保留它们的位置。我该如何解决这个问题?是我的专栏的投射方式,还是 vba:ado 解释它收到的内容的方式,还是 odbc 连接器返回的方式?
这是我用来调试这个问题的代码:
Public Sub decimalcheck()
Dim db As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim constring As String
constring = "DSN=my_dsn;"
db.Open constring, "user", "pass"
rs.ActiveConnection = db
rs.Source = "select Prices FROM my_table "
rs.Source = "select cast(my_prices as decimal(6,2) ) FROM my_table"
rs.Open
rs.MoveFirst
Do While Not rs.EOF And Not rs.BOF
Debug.Print rs.Fields(0)
Debug.Print CDec(rs.Fields(0))
rs.MoveNext
Loop
rs.Close
end sub
更新
我将一些结果转换为双精度,所以我不需要研究是否值得将其保留为小数或双精度。
【问题讨论】: