Php / ODBC编码问题

我使用ODBC从 PHP连接到sql Server.
PHP中,我从sql Server读取了一些字符串(nvarchar列)数据,然后将其插入到MysqL数据库中.当我尝试将这样的值插入MysqL数据库表时,我得到了这个MysqL错误
Incorrect string value: '\xB3\xB9ow...' for column 'name' at row 1

对于包含所有ASCII字符的字符串,一切都很好,当存在非ASCII字符(来自某些欧洲语言)时会出现问题.

因此,更一般地说:MS sql Server数据库中有一个Unicode字符串,由PHP通过ODBC检索.然后将它放入sql insert查询(作为utf-8 varchar列的值),这是为MysqL数据库执行的.

有人可以向我解释在这种情况下编码方面发生了什么吗?在哪一步可以进行字符编码转换?

我使用:PHP 5.2.5,MysqL5.0.45-community-nt,MS sql Server 2005.

PHP必须在Linux平台上运行.

更新:当我在此字符串上调用utf8_encode($s)并在MysqL插入查询中使用该值时,不会发生错误,但插入的字符串在MysqL数据库中无法正确显示(因此utf8编码仅适用于强制执行正确的utf8字符串,但它丢失了正确的字符).

首先,您拥有数据库的编码.然后,您具有ODBC客户端使用的编码.

如果ODBC客户端连接的编码与DB的编码不匹配,则在某些情况下,ODBC层将自动转换数据.

这里的技巧是强制ODBC客户端连接的编码.

对于“所有UTF-8”设置:

$conn=odbc_connect(DB_DSN,DB_USR,DB_PWD);
odbc_exec($conn,"SET NAMES 'UTF8'");
odbc_exec($conn,"SET client_encoding='UTF-8'");

// processing here

这与Postgresql PHP 5.x完美配合.
确切的语法和选项取决于数据库供应商.

您可以在这里找到非常有用且清晰的MysqL附加信息:http://dev.mysql.com/doc/refman/5.0/fr/charset-connection.html

希望这可以帮助.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...