微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

希望这可以帮助.

原文地址:https://www.jb51.cc/php/138328.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐