我正在使用SQL Server Express 2008 R2。
我正在从csv文件导入,并且某些列在某些自由文本中有一个“£”符号。将此文件加载到数据库中时,“£”符号显示为“ú”。我认为这绝对与数据库整理有关。当前的数据库排序规则是Latin1_General_CI_AS。
将哪个归类将“£”存储为SQL Server中的“£”。
非常感谢。
更多信息: 我在这里创建了一个小文件来演示我的问题:https://www.dropbox.com/s/yvcx4t9nk9p0bf7/poundTest.txt
use myDB;
go
create table test
(id int,
amt_range varchar(50));
bulk insert test
from 'F:\poundtest.txt'
with (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
firstrow=1
);
select * from test;
返回:
id amt_range
1 <-ú200K
2 -ú200K to -ú20k
3 -ú20k to ú0k
4 ú0k to ú20k
5 ú20k to ú200k
6 >ú200k
答案 0 :(得分:3)
SQL Server肯定会使用排序规则varchar
在nvarchar
或Latin1_General_CI_AS
列中正确存储“£”。我看到它每天都在我维护的软件中发生。
我认为问题在于文本文件的编码和读入方式。“£”在Windows-1252和Unicode中的代码点值为163。但是,在扩展ASCII(例如DOS代码页850)中,“£”的值为156,“ú”的值为163.您的代码是否在将数据传递给SQL Server之前尝试转换csv文本编码?如果csv编码为UTF-8,则不需要从ASCII转换。
<强>更新强>
在MSDN上看,似乎bulk insert
命令执行字符集转换。如果未指定,OEM是默认选项。
CODEPAGE = {'ACP'| 'OEM'| 'RAW'| 'code_page'}
默认情况下绝对不是你想要的。理想情况下,您可以指定UTF-8(CODEPAGE = '65001'
)。但是,MSDN表示不支持UTF-8。
我建议您将CSV文件的编码更改为Windows-1252,然后使用CODEPAGE = 'ACP'
选项导入数据。