【发布时间】:2011-02-14 13:37:32
【问题描述】:
我使用 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 检索的。然后将其放入为 mysql 数据库执行的 sql 插入查询(作为 utf-8 varchar 列的值)中。
有人可以向我解释一下在这种情况下在编码方面发生了什么吗?在哪一步可以进行哪些字符编码转换?
我使用:PHP 5.2.5、MySQL5.0.45-community-nt、MS Sql Server 2005。
PHP 必须在 Linux 平台上运行。
更新:当我在这个字符串上调用 utf8_encode($s) 并在 mysql 插入查询中使用该值时不会发生错误,但是插入的字符串在 mysql 中不能正确显示数据库(因此 utf8 编码仅适用于强制执行正确的 utf8 字符串,但它会丢失正确的字符)。
【问题讨论】:
-
您是否仅限于 odbc 或者您可以安装/使用例如sqlsrv 扩展? msdn.microsoft.com/en-us/library/cc296152%28SQL.90%29.aspx 它允许您(轻松)指定连接的字符集。
-
这个解决方案必须在 Linux 上运行,不幸的是,这个平台不支持你提到的扩展。
标签: php mysql odbc unixodbc odbc-sql-server-driver