【问题标题】:Php/ODBC encoding problemPHP/ODBC 编码问题
【发布时间】: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


【解决方案1】:

也许你可以使用PDO extension,如果有什么不同?

有一个用户贡献的评论 here 建议将 sql server 中的数据类型更改为其他内容,如果这不可能,请查看转换字段的用户类。

【讨论】:

    【解决方案2】:

    我没有通过 PHP 使用 ODBC 的经验,但是对于 mysql 函数,PHP 似乎默认为 ASCII 和 UTF8 连接,如果你想避免麻烦,需要明确说明。

    您确定 PHP 和 MySQL 服务器使用 UTF8 进行通信吗?在 PHP 6 之前,Unicode 支持往往会像这样令人讨厌地不一致。

    我记得 MySQL 文档提到了一个连接字符串参数来调整 Unicode 编码。

    从您的描述看来,PHP 将连接视为仅 ASCII。

    【讨论】:

      【解决方案3】:

      首先你有数据库的编码。然后你就有了 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

      希望这会有所帮助。

      【讨论】:

      • SET NAMES 'UTF8' 对于 MSSQL 是非法的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 2011-10-14
      • 2021-06-13
      • 2012-01-12
      • 2012-10-22
      相关资源
      最近更新 更多