我在查找PHP中处理UTF8字符的最佳方法时遇到了一些麻烦。我能够将UTF8数据(中文字符)加载到Vertica中,并且在使用JDBC客户端时可以看到它们,所以我知道数据正在被正确记录。
但是,当我通过PHP查询时,包含UTF8字符的字符串将作为空值。但是,我可以做一些事情,比如在URI_PERCENT_ENCODE函数中包装UTF8字段,然后对PHP中的数据执行urldecode,从而正确输出字符。
是否有任何ODBC驱动程序设置或PHP设置可以推荐更优雅地处理UTF8?
我们正在运行PHP 5.3,64位。
答案 0 :(得分:0)
无论如何,当使用Vertica 64位ODBC for Windows并调用SQLDescribeColW来描述具有中文名称和中文列名的表(即描述类似'select * from mytable'的SQL语句)时,名称返回编码为“funky UTF-8”。
“funky 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提供null的东西。我称之为ODBC驱动程序的错误。