将带重音字符的CSV文件导入SQL Server时如何保留重音?
解决SQL Server导入带重音字符CSV的乱码问题
先确认CSV文件的实际编码
用记事本打开CSV,点击「文件」→「另存为」,在编码下拉框里查看当前文件的编码(比如UTF-8、UTF-16、ANSI),这是解决问题的核心前提。针对不同编码的解决方案
UTF-8编码(含BOM或无BOM)
用CODEPAGE = '65001'指定UTF-8编码,配合DATAFILETYPE = 'char',同时确保行终止符匹配文件实际使用的(Windows生成的CSV一般是\r\n):IF OBJECT_ID('dbo.example', 'U') IS NOT NULL DROP TABLE dbo.example; CREATE TABLE example ( transaction_id INT, country NVARCHAR(255), -- 无需指定单字节排序规则,用数据库默认Unicode排序规则即可 state NVARCHAR(255), city NVARCHAR(255) ); BULK INSERT example FROM 'C:\your_file.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\r\n', FIRSTROW = 2, FORMAT = 'CSV', CODEPAGE = '65001', DATAFILETYPE = 'char' );UTF-16(Unicode)编码
直接用DATAFILETYPE = 'widechar',因为UTF-16是双字节编码,和nvarchar的存储格式匹配:BULK INSERT example FROM 'C:\your_file.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', -- 根据文件实际行终止符调整,可能是\r\n FIRSTROW = 2, FORMAT = 'CSV', DATAFILETYPE = 'widechar' );ANSI/Latin-1编码(Excel默认保存的CSV)
用CODEPAGE = '1252'对应Windows的ANSI编码:BULK INSERT example FROM 'C:\your_file.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\r\n', FIRSTROW = 2, FORMAT = 'CSV', CODEPAGE = '1252', DATAFILETYPE = 'char' );
额外注意事项
- 不要给nvarchar列指定单字节排序规则(比如
SQL_Latin1_General_CP1_CI_AS),这类排序规则为varchar设计,虽不影响nvarchar存储,但可能导致显示或排序异常,建议用数据库默认的Unicode排序规则(比如Latin1_General_100_CI_AS_SC)。 - 如果用Excel生成CSV,要保存为「CSV UTF-8(逗号分隔)」格式,避免ANSI编码导致的字符丢失。
- 测试时可以先导入单行数据(比如只包含Seúl和Japón的行),排查是否是行终止符不匹配导致的乱码扩散。
- 不要给nvarchar列指定单字节排序规则(比如
内容的提问来源于stack exchange,提问作者OranC
相关产品推荐
相关产品推荐

