使用php从Latin 1 Microsoft SQL数据库中读取特殊字符

时间:2014-09-23 09:25:55

标签: php sql-server encoding utf-8

我有一个预定义的Microsoft SQL数据库。数据库排序规则指定为SQL_Latin1_General_CP1_CI_AS。

数据库版本为:SQL Server Express 10.0.1600.22

某些表具有特殊字符的值(我假设为UTF-8)。我正在使用php mssql阅读这些表格,我最终在输出????? ???? ?????

中找到问号

我尝试使用ini_set('mssql.charset','utf8'),使用不同的编码值,例如windows-cp1251windows-cp1252但没有运气。

我不知道如何处理这个问题?我想我需要相当于MySQL SET NAMES UTF-8,但我不确定如何在MSSQL中这样做。有什么想法吗?

不幸的是,将表转换为utf8不是一种选择。字段类型为nvarchar(250)

3 个答案:

答案 0 :(得分:0)

这里有很多遗漏的信息;例如,数据库中字段的类型(varchar,nvarchar ???)。

如果将字段存储为varchar字段,请尝试将字段转换为unicode字段;例如:

选择强制转换(field1为nvarchar(200))为field1,...

此外,即使数据库排序规则是SQL_Latin1_General_CP1_CI_AS,每个字段也可以有自己的特定排序规则。数据库排序规则主要是在未指定字段的排序规则时要使用的默认排序规则。

答案 1 :(得分:0)

嗯,错误可能出现在各种各样的地方。首先要检查的是确保您的网页可以通过写一些内容在您的网站页面上正确显示扩展字符;例如:

<html>...<p>é</p>...

当然,如果不需要尝试使用&eacute;等HTML实体进行这些测试,因为问题不存在;你必须使用真正的编码扩展字符。

之后,您可以通过使用函数Unicode().检查数字值来检查扩展字符是否已正确存储在数据库中。您还可以检查是否可以使用{{1}编写扩展字符功能;例如:

NChar()

Unicode()和NChar()函数是标准的Microsoft SQL函数。

自从我上次用PHP编码以来已经很多年了,但是,根据我的记忆,配置的默认值足以显示来自使用nvarchar的SQL-Server数据库的任何扩展字符或ntext field。

答案 2 :(得分:0)

使用连接选项:“CharacterSet”=&gt; https://msdn.microsoft.com/en-us/library/cc626307(v=sql.105).aspx

中所述的“UTF-8”

它对我有用。无需进一步转换。