Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2008 R2中的朝鲜语(和其他Unicode)字符在查询结果中显示不正确_Sql Server_Sql Server 2008_Unicode_Collation_Cjk - Fatal编程技术网

Sql server SQL Server 2008 R2中的朝鲜语(和其他Unicode)字符在查询结果中显示不正确

Sql server SQL Server 2008 R2中的朝鲜语(和其他Unicode)字符在查询结果中显示不正确,sql-server,sql-server-2008,unicode,collation,cjk,Sql Server,Sql Server 2008,Unicode,Collation,Cjk,我有一个数据库,需要保存各种语言和字母的数据。我使用的是默认的拉丁文排序规则,但是所有的文本字段都是Unicode变体nchar、nvarchar 我可以使用我的前端应用程序从数据库中愉快地插入和检索Unicode数据,但是如果我使用SSMS查看数据,那么我所看到的就是胡言乱语 我可以插入以下内容: 극단적으로 在SSMS中看起来是这样的: 극단ì ìœ¼ë¡œ 但由我的前端应用程序检索,如下所示: 극단적으로 现在很明显,数据本身的存储是正常的,但是为什么SSMS会将其显示为胡言

我有一个数据库,需要保存各种语言和字母的数据。我使用的是默认的拉丁文排序规则,但是所有的文本字段都是Unicode变体nchar、nvarchar

我可以使用我的前端应用程序从数据库中愉快地插入和检索Unicode数据,但是如果我使用SSMS查看数据,那么我所看到的就是胡言乱语

我可以插入以下内容:

극단적으로
在SSMS中看起来是这样的:

극단ì ìœ¼ë¡œ
但由我的前端应用程序检索,如下所示:

극단적으로
现在很明显,数据本身的存储是正常的,但是为什么SSMS会将其显示为胡言乱语呢?有趣的是,如果我使用SSMS直接编辑数据并粘贴到上面,它将显示为此编辑:结果表明,从Alevia切换结果会导致这部分问题,因为显示的是正确的文本而不是框:

□□□□□
但如果我将其复制并粘贴到文本编辑器中,结果如下:

극단적으로
我使用MS Access并将其链接到我的SQL Server数据库,试图了解这是否只是SSMS行为不当/配置错误,但它显示出与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输出:

극단적으로 극단적으로

但是,如果我在该表上运行select,数据将在SSMS的输出窗口中显示为乱码。

因此,看起来PHP文件中有一个字符串文字:

$SQL = "INSERT INTO TableName (col1,col2) VALUES (N'극단적으로',N'극단적으로')";
看看:

以下是您可能需要知道的一些事情:

为Debian Lenny/Squence安装mssql支持:

apt-get install php5-sybase 
当您收到此错误消息时: 无法使用数据库库(如ISQL或ODBC 3.7版或更早版本)将仅Unicode排序规则或ntext数据中的Unicode数据发送到客户端

在/etc/freetds/freetds.conf中,将这两行添加到最后两行:

[global]
;tds version = 4.2
tds version = 8.0
client charset = UTF-8
您也可以在php.ini中编辑字符集,但如果以前在freetds.conf中编辑过,则不需要:

; Specify client character set..
; If empty or not set the client charset from freetds.comf is used
; This is only used when compiled with FreeTDS
mssql.charset = "UTF-8"
如果需要unicode支持,请使用nchar/nvarchar/ntext列类型


èèè蜜œœœœœ是您的극단적으로 在Windows Latin 1中显示。所以我猜SSMS没有配置为显示UTF-8…

我知道这是一个老问题,但我看不到问题的解决方案,我刚刚开始在SSMS中遇到同样的问题。我不认为问题在于PHP编码,基于编辑,如果结果被视为文本而不是网格,那么问题就解决了,我经历了相同的行为。我认为问题实际上在于SSM和网格输出的编码,因为即使SSM在作为文本查看时也能正确显示韩文字符

通过将字体更改为Arial Unicode MS,我成功地解决了SSMS中的问题。但是,我注意到,该问题也出现在其他应用程序中,尤其是文本编辑器(如记事本+)和记事本中

下面的帖子似乎包含了一个更持久的问题解决方案,但是我在一台网络计算机上,没有足够的权限来验证它

注意:在过去的6周里,我一直在SQL Server中使用韩语/韩语数据,但没有遇到此问题。这只是发生在今天,我有windows更新,但没有其他原因的行为变化。我以前也使用过这个方法,查看/查询了这些数据,没有任何问题,这些表还没有更新,并且明确编码为NVARCHAR。我的韩国同事仍然可以在SSMS的网格输出中正确查看数据


我希望这能帮助其他偶然发现这个问题的人。

也许可以添加一个示例,说明如何在客户端存储和检索数据?@Andomar在php中仅使用SQL查询,但直接在SSMS中运行查询具有相同的效果,除了在SELECT上,您会在SSMS中听到乱七八糟的信息,并在php中得到正确的输出。我不确定这是否有帮助,但我会在一秒钟内添加一个示例。如果您在编码和解码过程中犯了相同的错误,这两个错误可以相互抵消。但是SQL Server只会看到错误编码的版本。@Andomar那么我该如何解决这个问题呢?对不起,我应该说我使用的是windows 7machine@Ben:freetds.conf应该仍然在某个地方,或者在C:\中,或者在freetds环境变量的目录中。我找不到feetds.conf,所以我只是编辑了php.ini文件,但我没有做任何改变unfortunately@Ben:好的,看起来您正在使用。也许要仔细检查文件存储的编码?在记事本中打开.php文件时,韩语看起来如何?没错,我使用的是Microsoft php驱动程序。文件编码设置为UTF-8 an
d当在记事本中打开时,它会将韩文字符显示为有趣的小方框。SQL Server无法存储UTF-8。nvarchar列是UCS-2,char列是单字节编码。因此,驱动程序必须先将UTF-8转换为UCS-2,然后再将其传输到SQL Server。我不使用MS SQL,所以我相信您。可以肯定的是,这一点是肯定的극단적으로 在UTF-8中显示为Windows拉丁语1。所以存储的字节是一系列UTF-8码点,被误解了。@Andomar所以我需要告诉SSMS停止尝试将这些列显示为拉丁语1…..类似的东西是的。另请参见@Andomar对SQL Server中UTF8和UCS2的评论。您可能必须转换字符串。@Ben:SSMS和SQL Server仅支持UCS-2。您必须指示驱动程序将字符串作为UCS-2或UTF-16传输,这两种格式大致兼容。