从Apache/PHP查询时,编码不正确
我的Vertica连接有问题。从Apache/PHP查询时,编码不正确,php,apache,odbc,unixodbc,vertica,Php,Apache,Odbc,Unixodbc,Vertica,我的Vertica连接有问题。 我使用PHP和PDO ODBC驱动程序(通过unixODBC)。 当我通过isql连接到Vertica并从表中选择记录时,所有数据都经过精细编码-带有UTF-8(非ASCII符号,例如西里尔字母)的字段正确打印。 如果使用PHP脚本从web连接并执行相同的查询,则字段中有一些unicode字符,如\u001A\u001A\u001A\u001A 每个\u001A代表一个非ASCII符号,无法打印 我发现只有在从web运行脚本时才会出现此问题(web服务器是Apac
我使用PHP和PDO ODBC驱动程序(通过unixODBC)。
当我通过isql连接到Vertica并从表中选择记录时,所有数据都经过精细编码-带有UTF-8(非ASCII符号,例如西里尔字母)的字段正确打印。
如果使用PHP脚本从web连接并执行相同的查询,则字段中有一些unicode字符,如\u001A\u001A\u001A\u001A
每个\u001A代表一个非ASCII符号,无法打印 我发现只有在从web运行脚本时才会出现此问题(web服务器是Apache2)。
因此,如果您从控制台运行脚本,就可以了。
但是如果您从localhost/test.php执行此操作,我们就会遇到问题。
它出现在适用于Linux和Windows的x32和x64版本的Vertica客户端驱动程序上。
Apache如何影响我们从Vertica获得的结果?确保您的
Vertica.ini
文件中有driverManager编码=UTF-16
。当然,您可能需要尝试不同的值(UTF-8
或UTF-32
可能),但对我来说,它只适用于UTF-16
。它似乎完全独立于客户端使用的编码。我认为unixODBC在内部进行了某种转换,Vertica驱动程序必须生成驱动程序管理器所期望的任何编码。需要直接向PHP代码中添加语言环境设置,一切都开始工作
setlocale(LC_ALL, 'en_US.UTF-8');
这肯定比我的工资级别高。我强烈建议让Vertica参与进来。这听起来像是驱动程序中的一个bug,需要对其进行一些调试。对于这个网站来说,这不是一个很好的答案,但这正是我在《匆匆忙忙》之后要做的。我尝试了DriverManager编码的所有编码-没有结果。您可以从web上选择系统上带有非ASCII符号的Vertica数据?(Apache/PHP)