sql文件编码和服务器字符集,如何处理UTF-8编码(codepage = 65001)文件导入SQL服务器...

在挪威,我们有3个令人讨厌的角色,造成各种各样的问题。由于SQL Server 2008,微软决定不支持代码页65001.我已经找到了一个可管理的解决方案,用UTF-8文件导入到带有OPENROWSET(BULK)的sql server中,并保留了标记。如何处理UTF-8编码(codepage = 65001)文件导入SQL服务器

我创建了一个使用StreamReader和StreamWriter将文件从UTF-8转换为默认编码ANSI的powershell脚本。

$filename = "C:\Test\UTF8_file.txt"

$outfile = "C:\Test\ANSI_file.txt"

$reader = new-object System.IO.StreamReader($filename, [System.Text.Encoding]::GetEncoding(65001))

$stream = new-object System.IO.StreamWriter($outfile, $false, [System.Text.Encoding]::Default)

我在同一个进程中去掉第一行,标题行的文件。

$i=1

while(($line = $reader.ReadLine()) -ne $null) {

if($i -gt 1) {

$stream.WriteLine($line)

}

$i++

}

$reader.Close()

$stream.Close()

然后,我可以使用OPENROWSET将ANSI文件导入到sql server中,并在这样做时处理数据。使用等于danish_norwegian排序规则的代码页1252。

insert into SomeDatabase.dbo.SomeTable

SELECT [companynumber]

, case [role] when 'Styreformann' then 'Styreleder' when 'Styrets leder' then 'Styreleder' else rolle end as 'role'

, case [representant] when 'Y' then '1' else '0' end as 'representant'

, left((RIGHT('0000'+ CONVERT(VARCHAR,postnr),5)),4) end as 'postnr'

, income*1000 as income

, null as person2id

FROM OPENROWSET(BULK 'C:\Test\ANSI_file.txt',

FORMATFILE = 'C:\Test\FormatBulkInsert_file.xml'

, CODEPAGE =1252

, ROWS_PER_BATCH = 50000

) as v

此方法确保挪威令牌正确显示。格式文件看起来是这样的:

希望这是有帮助别人,因为我花了很多时间googleing之前,我找到了一种方法来解决这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值