Php 为什么将MS SQL数据转换为MYSQL时会得到无效字符?

Php 为什么将MS SQL数据转换为MYSQL时会得到无效字符?,php,sql-server,character-encoding,Php,Sql Server,Character Encoding,我正在编写一个PHP脚本,将数据从MicrosoftSQLServer2008数据库导入MYSQL数据库 MSSQL服务器设置了“SQL拉丁1\u通用\u CP1\u CI\u AS”排序规则,相关数据存储在“nchar”类型的列中 我的PHP网页使用 <meta http-equiv="content-type" content="text/html; charset=utf-8"> 暂时忘记将数据插入MYSQL数据库。我无法在PHP页面中正确显示字符串。根据我清单中的示例: e

我正在编写一个PHP脚本,将数据从MicrosoftSQLServer2008数据库导入MYSQL数据库

MSSQL服务器设置了“SQL拉丁1\u通用\u CP1\u CI\u AS”排序规则,相关数据存储在“nchar”类型的列中

我的PHP网页使用

<meta http-equiv="content-type" content="text/html; charset=utf-8">
暂时忘记将数据插入MYSQL数据库。我无法在PHP页面中正确显示字符串。根据我清单中的示例:

echo $row->Text1
由我的浏览器呈现为明显无效的字符:“Lucy”�s“

下面的所有示例都显示为空白:“Lucys”


在我看来,这似乎是一个字符集不匹配的问题,但如何从MS SQL数据库中正确显示这些数据(而不更改我的网页编码)?如果我能解决这个问题,我可能可以解决将其存储在MYSQL数据库部分的问题。

如果源数据库中的字符串是用UTF-8编码的,那么应该使用
utf8\u decode
,而不是
utf8\u encode

但它们可能是用拉丁语或“西方”编码的。所以我会尝试
iconv(“CP1252”,“UTF-8”,“$row->Text1”)


另一种方法是运行SQL查询,显式设置已知编码。例如,根据文档,此查询将使用代码页1252对字段Text1进行编码:
选择Text1 COLLATE SQL\u Latin1\u General\u CP1\u CI\u AS FROM…

试试这个命令它对我有用:

$connectionInfo = array( "Database"=>"DBName", "CharacterSet" =>"UTF-8"); 

我没有使用过sqlsrv,但是您可能需要在连接到数据库时设置其连接编码。在使用“CP1252”连接.iconv之后,在mysql下运行
SET NAMES utf8
的等效方法实现了这个技巧,这对我来说很奇怪,因为“nchar”字段上的MS文档声称它是一个使用UCS-2字符集编码的unicode字段。谢谢你的修复!谢谢。。。你刚刚救了我一天!
$connectionInfo = array( "Database"=>"DBName", "CharacterSet" =>"UTF-8");