【发布时间】:2012-06-12 09:15:57
【问题描述】:
我有一个数据库,它需要保存各种语言和字母的数据。我使用的是默认的拉丁语排序规则,但所有文本字段都是 Unicode 种类(nchar、nvarchar)。
我可以使用我的前端应用程序愉快地从数据库中插入和检索 Unicode 数据,但是如果我使用 SSMS 查看数据,那么我看到的只是乱码!
我可以插入这个:
극단적으로
在 SSMS 中如下所示:
극단ì 으로
但是被我的前端应用程序这样检索:
극단적으로
现在显然数据本身存储正常,但为什么 SSMS 将其显示为乱码?有趣的是,如果我使用 SSMS 直接编辑数据并将其粘贴在上面,然后将其显示为这样(EDIT: 结果是从grid to text 切换结果可以解决我的这部分问题显示文本而不是框。):
□□□□□
但如果我将其复制并粘贴到文本编辑器中,它会显示为:
극단적으로
为了查看这是否只是 SSMS 行为不当(/我配置错误),我使用了 MS Access 并将其链接到我的 SQL Server 数据库,但它显示的乱码与 SQL Server 相同。
此数据库将保存 Web 应用程序的所有静态文本,因此能够轻松查看和编辑数据对我来说很重要,当你只能看到以下内容时不容易做到:
극단ì 으로
任何建议都会很棒,我真的坚持这一点。
编辑
这是我目前在 PHP 中完成的数据插入示例:
$con = sqlsrv_connect("(local)", array("Database" => "myDatabase"));
$SQL = "INSERT INTO TableName (col1,col2) VALUES (N'극단적으로',N'극단적으로')";
sqlsrv_query($con,$SQL);
这是我的数据检索示例:
$SQL = "SELECT col1,col2 FROM TableName";
$rs = sqlsrv_query($con,$SQL);
while($row = sqlsrv_fetch_array($rs)){
echo $row["col1"]." ".$row["col2"]."\n";
}
这会导致 PHP 输出:
극단적으로 극단적으로
但如果我在该表上运行选择,则数据在 SSMS 的输出窗口中显示为乱码。
【问题讨论】:
-
也许添加一个示例,说明您如何在客户端中存储和检索数据?
-
@Andomar 只是在 php 中使用 SQL 查询,但直接在 SSMS 中运行查询具有相同的效果,除了在
SELECT上,您会在 SSMS 中得到乱码而在 php 中得到正确的输出。我不确定它是否会有所帮助,但我会在几秒钟内添加一个示例。 -
如果在编解码过程中出现同样的错误,两者可以抵消。但 SQL Server 只会看到编码错误的版本。
-
@Andomar 那么我将如何解决这个问题?
标签: sql-server sql-server-2008 unicode collation cjk