1

PHP で UTF8 文字を処理する最良の方法を見つけるのに苦労しています。UTF8 データ (漢字) を Vertica に問題なく読み込むことができ、JDBC クライアントを使用しているときにそれらを表示できるので、データが正しく記録されていることがわかります。

ただし、PHP 経由でクエリを実行すると、UTF8 文字を含む文字列が null として返されます。ただし、UTF8 フィールドを URI_PERCENT_ENCODE 関数でラップし、PHP でデータに対して urldecode を実行すると、文字が正しく出力されます。

UTF8 をより適切に処理するために推奨できる ODBC ドライバー設定または PHP 設定はありますか?

PHP 5.3、64ビットを実行しています。

4

1 に答える 1

0

なんにせよ、Vertica 64 ビット ODBC for Windows を使用し、SQLDescribeColW を呼び出して中国語の名前と中国語の列名を持つテーブルを記述する (つまり、'select * from mytable' のような SQL ステートメントを記述する) 場合、名前はエンコードされて返されます。 「ファンキーUTF-8」。

「ファンキーな UTF-8」または FUTF-8 エンコーディングは wchar_t[] (Windows では 16 ビット値の配列) を使用し、配列の各エントリには 1 つの実 UTF-8 バイトがあります。

たとえば、列名が「時間髦」で、UTF-16 エンコーディングが65f6h,9ae6h (2 文字、それぞれ 16 ビット) であり、その UTF-8 エンコーディングがe6h、97h、b6h、e9h、abh、a6h (2 文字、2 文字、それぞれ 3 バイト) の場合、FUTF-8 では次のようになります: 00e6h、0097h、00b6h、00e9h、00abh、00a6h (6 文字、それぞれ 16 ビット)。

これがPHPのnullを入れるものだと思います。私はそれを ODBC ドライバーのバグと呼んでいます。

于 2014-02-19T12:32:30.433 に答える