我使用 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 字符串,但它会丢失正确的字符)。