当前位置:  开发笔记 > 编程语言 > 正文

将UTF8数据插入SQL Server 2008

如何解决《将UTF8数据插入SQLServer2008》经验,为你挑选了2个好方法。

我有编码问题.我想将UTF-8编码文件中的数据放入SQL Server 2008数据库.SQL Server仅具有UCS-2编码,因此我决定显式转换检索到的数据.

// connect to page file
_fsPage = new FileStream(mySettings.filePage, FileMode.Open, FileAccess.Read);
_streamPage = new StreamReader(_fsPage, System.Text.Encoding.UTF8);

这是数据的转换例程:

private string ConvertTitle(string title)
{
  string utf8_String = Regex.Replace(Regex.Replace(title, @"\\.", _myEvaluator), @"(?<=[^\\])_", " ");
  byte[] utf8_bytes = System.Text.Encoding.UTF8.GetBytes(utf8_String);
  byte[] ucs2_bytes = System.Text.Encoding.Convert(System.Text.Encoding.UTF8, System.Text.Encoding.Unicode, utf8_bytes);
  string ucs2_String = System.Text.Encoding.Unicode.GetString(ucs2_bytes);

  return ucs2_String;
}

当单步执行关键标题的代码时,变量监视会显示utf-8和ucs-2字符串的正确字符.但在数据库中它 - 部分错误.有些特殊字符可以正确保存,有些则不能保存.

错了:ñ变成了n

右:É或é例如正确插入.

知道问题可能在哪里以及如何解决?

坦率之前,弗兰克



1> Chris Chadwi..:

SQL Server 2008为您处理从UTF-8到UCS-2的转换.

首先确保您的SQL表使用列的nchar,nvarchar数据类型.然后,您需要通过在编码字符串前面添加N来告诉SQL Server您在Unicode数据中的发送.

INSERT INTO tblTest (test) VALUES (N'EncodedString')

来自Microsoft http://support.microsoft.com/kb/239530

请在此处查看我的问题和解决方案:如何将经典asp表单帖子中的UTF-8数据转换为UCS-2以插入SQL Server 2008 r2?



2> bobince..:

我认为你对编码是什么有误解.编码用于将一堆字节转换为字符串.String本身不具有与之关联的编码.

在内部,字符串以UTF-16LE字节存储在内存中(这就是为什么Windows通过调用UTF-16LE编码只是"Unicode"而使每个人感到困惑的原因).但是你不需要知道 - 对你来说,它们只是字符串.

你的功能是:

    采用字符串并将其转换为UTF-8字节.

    获取UTF-8字节并将其转换为UTF-16LE字节.(您可能在第一步中直接编码为UTF-16LE而不是UTF-8.)

    获取那些UTF-16LE字节并将它们转换回字符串.这为您提供了与首先完全相同的String!

所以这个功能是多余的; 你实际上可以从.NET传递一个普通的字符串到SQL Server,而不用担心它.

带反斜杠的位确实做了一些事情,大概是应用程序特定的我不明白它的用途.但是,该功能中的任何内容都不会导致Windows将字符变为像n到n.

当您尝试将不在数据库自身编码中的字符放入数据库时​​,会出现什么/将导致这种展平.据推测é是可以的,因为这个角色是你的西欧cp1252的默认编码,但不是这样它会被破坏.

SQL Server确实使用'UCS2'(实际上是UTF-16LE)来存储Unicode字符串,但是你已经告诉它,通常使用NATIONAL CHARACTER(NCHAR/NVARCHAR)列类型而不是普通CHAR.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有