用odbc和php pdo连接impala,字符串字段为空

Posted

技术标签:

【中文标题】用odbc和php pdo连接impala,字符串字段为空【英文标题】:Connect impala with odbc and php pdo, string fields are empty 【发布时间】:2016-04-21 18:13:06 【问题描述】:

当我只使用odbc时,全部运行成功

$dsn = "DSN=DingdongImpala;host=172.168.1.100;port=21050;database=mmdb;";
$user = '';
$password = '';
$conn = odbc_connect($dsn, $user, $password);
$result = odbc_exec($conn, "select succount,failedcount,appid from t_mm_acc_date limit 1");
while($row = odbc_fetch_array($result)) 
    print_r($row);

结果是:

Array
(
    [succount] => 0          //int
    [failedcount] => 1       //int
    [appid] => 202361        //string
)

但是当我使用pdo访问odbc时,String类型的字段都是空的

$dsn = "odbc:DSN=DingdongImpala;Host=172.168.1.100;Port=21050;database=mmdb;";
$user = '';
$password = '';
$cnx = new PDO($dsn, $user, $password);
$result = $cnx->query("select succount,failedcount,appid from t_mm_acc_date limit 1");
print_r($result->fetchObject());

结果是:

stdClass Object
(
    [succount] => 100       //int
    [failedcount] => 0      //int
    [appid] =>              //string, empty
)

我试过很多情况,只要从impala中选择String字段,结果会是空的,但是int字段是正常的。 我的系统环境:

centos 6
php 5.3.6
php-odbc-5.3.3
unixODBC-2.2.14
ClouderaImpalaODBC-2.5.29.1009-1.el6.x86_64.rpm

【问题讨论】:

谁能帮助我? 【参考方案1】:

我面临同样的问题,作为解决方法,我将字符串字段转换为 varchar,如下所示:

select succount, failedcount, cast(appid as varchar(255)) from t_mm_acc_date limit 1

【讨论】:

以上是关于用odbc和php pdo连接impala,字符串字段为空的主要内容,如果未能解决你的问题,请参考以下文章

MS SQL SERVER、PHP、PDO、ODBC:用户登录失败

在第 256 个字符处截断数据 - PHP 与 HFSQL 数据库,使用 PDO ODBC 试点

PHP PDO ODBC 连接

PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】

使用 ODBC 使用 msaccess 创建 PHP PDO 连接时出现致命错误

PDO_ODBC 的字符编码问题