Access ODBC:为数字(整数)字段返回错误的值

时间:2015-03-27 14:11:15

标签: php ms-access odbc unixodbc

我正在构建需要导入Microsoft Access文件的应用程序。该应用程序是用PHP编写的,并按照以下教程来设置环境。 (https://gist.github.com/amirkdv/9672857

下载ODBC驱动程序libmdbodbc1并且在获取数值时遇到问题。认为问题可能是驱动程序,然后下载了Easysoft提供的试用驱动程序,令我惊讶的是我遇到了同样的问题。 (http://www.easysoft.com/products/data_access/odbc-access-driver/index.html#section=tab-1

在我使用的文件中,我有以下结构:

enter image description here

当我在数据库中运行查询时,它返回以下结果:

enter image description here

我通过mb -tools直接从命令行运行查询,因为起初我认为它可能是PHP的问题

我已经尝试了所有可以想象的东西,因为每一步都会回溯,而且PHP的命令行都会得到相同的结果。已经在另一台机器上测试过。

注意:我尝试过查询其他文件并得到同样的错误,然后我认为问题不在于文件。

注2:我解决了这个问题。返回值是double格式的值。可能是驱动程序是用C编写的,这种方式是双倍的。通过使用PHP的EasySoft驱动程序,我得到了正确的表示。很快就出现了libmdbodbc1驱动程序的问题。我会寻找EasySoft驱动程序的替代品,因为它非常昂贵。

1 个答案:

答案 0 :(得分:2)

区号代码被检索为浮点值 * ,浮点数的默认格式是(显然)科学记数,即

201 = 2.01 times 10 to the power of 2 --> 2.01000e+02

如果您的ODBC驱动程序(MDB Tools?)支持CInt()函数将值转换为整数,那么您可以使用

SELECT CInt(area_code) AS areacode ...

或者,如果这不起作用,您可以尝试使用CONVERT() ODBC函数

SELECT { fn CONVERT(area_code, SQL_INTEGER) } AS areacode ...

否则,您可以在使用像intval()这样的PHP函数检索它之后将该值转换为整数。

* 这种情况的一种常见方式是将数值从Excel导入Access。默认情况下,数值以Double的形式导入Access,即使它们实际上只是Excel文档中的整数。