0

我在连接到 Vertica 时遇到了一些问题。
我使用 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 获得的结果?

4

2 回答 2

0

确保你DriverManagerEncoding=UTF-16vertica.ini文件中有。当然,也许你需要尝试不同的值(UTF-8或者UTF-32也许),但对我来说,它只适用于UTF-16. 它似乎完全独立于您的客户端使用的编码。我认为 unixODBC 在内部进行了某种转换,Vertica 驱动程序必须生成驱动程序管理器所期望的任何编码。

于 2013-08-02T21:57:01.530 回答
0

需要将语言环境设置直接添加到 PHP 代码中,一切都开始工作

setlocale(LC_ALL, 'en_US.UTF-8');
于 2013-08-06T11:46:13.243 回答