【问题标题】:SQL Server 2008 Replace Unicode CharactersSQL Server 2008 替换 Unicode 字符
【发布时间】:2012-09-12 21:47:05
【问题描述】:

我刚刚完成了一个项目,我将来自 34 个非标准化数据源的数据聚合到一个标准化 SQL Server 2008 数据库中。

唯一的问题是...来自这些数据源的较大文本字段失去了一些保真度,并且现在始终显示 Unicode 控制字符(很多)。

这是我用来从制表符分隔的 *.txt 文件之一导入数据的代码:

BULK INSERT MyTabeNameHere
        FROM 'C:\FILE\PATH\HERE\FileNameHere.txt'       
        WITH
        (
            FIELDTERMINATOR = '\t',
            ROWTERMINATOR = '\n',
            FIRSTROW = 2
        )

示例数据可能是:

Lorem ipsum ò dolor sit amet
ááá Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsumû dolor sit amet
Lorem ipsum dolor sit aÆmet

我想通过 SQL 函数运行该数据并输出...

期望的输出是:

Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet    
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet

提前致谢!

【问题讨论】:

  • 文本文件“失去保真度”?如果您是在发明自己的术语,我们应该如何理解您的意思?
  • Remus 'fidelity' 的同义词是 'accuracy'。 tinyurl.com/bu5yxbb
  • 举例说明您的输入和错误输出可能会有所帮助。
  • 问题是:文件是损坏还是你用错误的编码读取它?您的术语并没有使它更清楚。
  • 检查问题文件?他们是否只使用\n(而不是\r\n)? Bulk Insert 可能会在 \r\n 中变得可爱和替代。试试 char(10)。

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

还有其他bulk insert 选项可能在这种情况下有所帮助,例如:

DATAFILETYPE = 'widechar' -- and others

CODEPAGE = 'ACP' -- and others

moving my bulk operations from SQL 2000 to 2008 时,我不得不放弃使用格式文件并包含widechar 作为获得正确输出的选项。不过,我对你的困境不够熟悉,不知道这是否对你有用。

[...] 34 个未标准化的数据源 [...]

正如大量文档所述,了解您正在读取的文件类型(ascii、ansi 等)非常重要。

【讨论】:

  • 我已经过了重新导入数据的阶段。我想要做的是更新数据库中已经存在的数据。即使那是用 '' 替换 Unicode 控制字符。我更愿意用预期的字符替换它们,但用 '' 替换是选项 B。
  • 如果您不使用正确的编码重新导入数据,您可能会通过手动观察源数据的某些部分来猜测替换字符,然后运行 ​​ad-hoc replace 使用 asciicharncharunicode 查询,直到您满意为止。 @Blam 在寻找换行符时可能是正确的。
  • @TimLehner 我怀疑编码是正确的,因为这些是常见的外语字符。我一直在处理它,在 .NET 中有一个简单的转换,但他坚持使用 SQL 函数和 BULK IMPORT 一些如何导致这种保真度的损失。
猜你喜欢
  • 2021-12-07
  • 2014-12-23
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
  • 2015-11-14
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多