2013-10-17 27 views
1

我一直遇到一些問題,找出了在PHP中處理UTF8字符的最佳方法。我可以很好地將UTF8數據(中文字符)加載到Vertica中,並且在使用JDBC客戶端時可以在那裏看到它們,因此我知道正在正確記錄數據。需要幫助使用PHP ODBC驅動程序從Vertica查詢UTF8字符串

但是,當我通過PHP查詢時,包含UTF8字符的字符串會作爲空值出現。但是,我可以做一些事情,比如將UTF8字段包裝在URI_PERCENT_ENCODE函數中,然後對PHP中的數據執行urldecode,從而正確輸出字符。

是否有任何ODBC驅動程序設置,或PHP設置,你可以推薦處理UTF8更優雅?

我們正在運行PHP 5.3,64位。

回答

0

無論什麼值得,在使用適用於Windows的Vertica 64位ODBC並調用SQLDescribeColW來描述具有中文名稱和中文列名稱的表格(即,描述類似'select * from mytable'的SQL語句)時,返回以「時髦的UTF-8」編碼的名稱。 「時髦的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的空值。我會把它稱爲ODBC驅動程序的錯誤。