我正在编写 PHP 脚本以将数据从 Microsoft SQL Server 2008 数据库导入 MYSQL 数据库。
MSSQL 服务器设置了排序规则“SQL_Latin1_General_CP1_CI_AS”,相关数据存储在“nchar”类型的列中。
我的 PHP 网页使用
<meta http-equiv="content-type" content="text/html; charset=utf-8">
表示它们应该以 UTF-8 字符编码显示。
我正在使用 sqlsrv PHP 扩展从 MSSQL 数据库中提取数据。
$sql = 'SELECT * FROM [tArticle] WHERE [ID] = 6429';
$stmt = &sqlsrv_query($dbHandler, $sql);
while ($row = sqlsrv_fetch_object($stmt)) {
// examples of what I've tried simply to display the data
echo $row->Text1;
echo utf8_encode($row->Text1);
echo iconv("ISO-8859-1", "UTF-8", $row->Text1);
echo iconv("ISO-8859-1", "UTF-8//TRANSLIT", $row->Text1);
}
暂时忘记将数据插入 MYSQL 数据库。我无法让字符串在我的 PHP 页面中正确显示。从我列表中的示例:
echo $row->Text1
由我的浏览器呈现为明显无效的字符:“Lucy�s”
后面的所有示例都呈现为空白:“Lucys”
这对我来说似乎是一个字符集不匹配问题,但我怎样才能从 MS SQL 数据库中正确显示这些数据(不改变我的网页编码)?如果我能解决这个问题,我可能可以解决将其存储在 MYSQL 数据库部分的问题。
最佳答案
如果源数据库中的字符串是UTF-8编码的,你应该使用utf8_decode
,而不是utf8_encode
。
但它们可能以某种拉丁语或“西方”编码Windows code page .例如,我会尝试 iconv("CP1252", "UTF-8", $row->Text1);
。
另一种方法是运行一个明确设置已知编码的 SQL 查询。例如,根据 Windows Collation Name (Transact-SQL)文档中,此查询将使用代码页 1252 对字段 Text1 进行编码:SELECT Text1 COLLATE SQL_Latin1_General_CP1_CI_AS FROM ...
。
关于php - 为什么在将 MS SQL 数据转换为 MYSQL 时会出现无效字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663325/