我在SQL Server中的表有以下几列UTF-8的批量插入VS UTF-16编码数据
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命令具有相同格式的文件,我得到一个错误:
Msg 4864, Level 16, State 1, Line 1
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 1 (sub_brand_id).
我的批量插入查询看起来是这样的:
BULK INSERT <table> FROM <data_path>
WITH (
FORMATFILE = <Format_File_path>
FIRSTROW = 2,
LASTROW = 3
)
附:我的数据确实有特殊的字符,中文和日文的奇怪名称,葡萄牙语和西班牙语混合。为了保持数据不被污染,我需要使用utf-16。
任何人都可以提供一个原因和解决方案吗?
我已经尝试了以上两个建议。但它不适用于他们两个! P.S. - 如果我的表具有与我的数据文件相同的列数,并且执行BULK INSERT。那么它的工作。 –