【发布时间】:2017-01-20 08:15:26
【问题描述】:
我的 SQL Server 中有一个包含以下列的表
create table raw.sub_brand_channel_mapping
(
ImportFileId int NULL,
[sub_brand_id] int ,
[sub_brand_name] [nvarchar](1024) ,
[channel_country_id] int ,
[channel_id] int,
[channel_name] [nvarchar](1024) ,
[status] [varchar](1024) ,
[eff_start_date] date ,
[eff_end_date] date
)
我正在尝试批量插入.csv 文件。我的表有 9 列,而我的 csv 数据文件有 8 列。第一列“ImportFileId”应该稍后填写。为此,我使用了如下所示的格式文件。
10.0
8
1 SQLCHAR 0 1000 "|" 2 sub_brand_id ""
2 SQLCHAR 0 2000 "|" 3 sub_brand_name SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 2000 "|" 4 channel_country_id ""
4 SQLCHAR 0 2000 "|" 5 channel_id ""
5 SQLCHAR 0 2000 "|" 6 channel_name SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 0 2000 "|" 7 status SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 2000 "|" 8 eff_start_date ""
8 SQLCHAR 0 2000 "\r\n" 9 eff_end_date ""
可以看出第一列是空的。当我使用 BULK INSERT 将数据用作 utf-8 编码时,我的 BULK INSERT 是成功的。但是,由于 SQL Server 版本 12 不支持 utf-8 编码,因此我的数据中的特殊字符会发生变化。
为了保持原始数据,我将编码转换为 utf-16。但是,当我对相同的格式文件使用相同的 BULK INSERT 命令时,出现错误:
消息 4864,第 16 级,状态 1,第 1 行
第 2 行第 1 列 (sub_brand_id) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。
我的批量插入查询如下所示:
BULK INSERT <table> FROM <data_path>
WITH (
FORMATFILE = <Format_File_path>
FIRSTROW = 2,
LASTROW = 3
)
附:我的数据确实有特殊字符,奇怪的中文和日文名称,葡萄牙语和西班牙语混合。为了保持数据不掺杂,我需要使用 utf-16。
谁能提供一个原因和解决方案?
【问题讨论】:
标签: sql-server utf-8 bulkinsert utf-16