需要帮助使用PHP ODBC驱动程序从Vertica查询UTF8字符串

时间:2013-10-17 18:23:35

标签: php utf-8 odbc vertica

我在查找PHP中处理UTF8字符的最佳方法时遇到了一些麻烦。我能够将UTF8数据(中文字符)加载到Vertica中,并且在使用JDBC客户端时可以看到它们,所以我知道数据正在被正确记录。

但是,当我通过PHP查询时,包含UTF8字符的字符串将作为空值。但是,我可以做一些事情,比如在URI_PERCENT_ENCODE函数中包装UTF8字段,然后对PHP中的数据执行urldecode,从而正确输出字符。

是否有任何ODBC驱动程序设置或PHP设置可以推荐更优雅地处理UTF8?

我们正在运行PHP 5.3,64位。

1 个答案:

答案 0 :(得分:0)

无论如何,当使用Vertica 64位ODBC for Windows并调用SQLDescribeColW来描述具有中文名称和中文列名的表(即描述类似'select * from mytable'的SQL语句)时,名称返回编码为“funky UTF-8”。

“funky UTF-8”或FUTF-8编码使用wchar_t [](在Windows上它是一个16位值的数组),在数组的每个条目中,有一个真正的UTF-8字节

例如,如果列名为“时髦”,其UTF-16编码为 65f6h,则为9ae6h (两个字符,每个16位),其UTF-8编码为 e6h, 97h,b6h,e9h,abh,a6h (两个字符,每个3个字节)然后在FUTF-8中你得到: 00e6h,0097h,00b6h,00e9h,00abh,00a6h ( 6个字符,每个16位。

我猜这就是为PHP提供null的东西。我称之为ODBC驱动程序的错误。