Encoding is not proper when query from Apache/PHP

走远了吗. 提交于 2019-12-11 23:02:50

问题


I have some problem with connection to my Vertica.
I use PHP and PDO ODBC driver (thrue unixODBC).
When I connect to Vertica via isql and select records from table all data are fine encoded - fields with UTF-8 (non ASCII symbols, for example cyrillic) correctly prints.
If connect from web with PHP script and execute same query that fields has some unicode characters like this \u001A\u001A\u001A\u001A
Each \u001A represent a one non ASCII symbol and can't be printed.

I found that this problem occurs only when you run a script from the web (web server is Apache2).
So if you run the script from the console, it's OK.
But if you do it from localhost/test.php, we get the issue.
It occurs on x32 and x64 versions of Vertica client drivers for Linux and Windows.
How does the Apache can influence the outcome results that we get from Vertica?


回答1:


Make sure you have DriverManagerEncoding=UTF-16 in your vertica.ini file. Of course maybe you need to try a different value (UTF-8 or UTF-32 maybe) but for me, it only worked with UTF-16. It seems to be completely independent of what encoding your client is using. I think unixODBC does some kind of conversion internally, and the Vertica driver has to produce whatever encoding the driver manager was expecting.




回答2:


Needs to added locale setting directly to PHP code and everything start to work

setlocale(LC_ALL, 'en_US.UTF-8');


来源:https://stackoverflow.com/questions/17985201/encoding-is-not-proper-when-query-from-apache-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!