Php / ODBC编码问题
我使用ODBC从
PHP连接到SQL Server.
在PHP中,我从SQL Server读取了一些字符串(nvarchar列)数据,然后将其插入到mysql数据库中.当我尝试将这样的值插入mysql数据库表时,我得到了这个mysql错误: Incorrect string value: 'xB3xB9ow...' 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 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |