问题
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