You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2012批量插入UTF-8带BOM的TXT文件时如何去除BOM字符?

解决SQL Server 2012加载UTF-8 txt文件时首行出现BOM字符的问题

这个问题我之前也碰到过,SQL Server 2012对带BOM的UTF-8文件确实有点小脾气😅,给你几个靠谱的解决办法:

方法一:指定UTF-8编码的代码页

SQL Server 2012开始支持通过CODEPAGE参数指定UTF-8编码(代码页65001),当你加上这个参数后,SQL Server会自动识别并跳过UTF-8的BOM,不会把它当成数据读取。修改后的脚本如下:

CREATE TABLE #Temp1(record nvarchar(512))
BULK INSERT #Temp1 
FROM 'C:\Test\test.txt' 
WITH (
    ROWTERMINATOR = '\n',
    CODEPAGE = '65001' -- 明确指定文件为UTF-8编码
)
SELECT * FROM #Temp1

方法二:加载后手动移除BOM字符

如果因为环境限制没法使用CODEPAGE参数,你可以在查询结果里手动去掉首行的BOM字符。UTF-8的BOM在nvarchar类型里会显示为N'∩╗┐',用STUFF函数就能轻松移除:

CREATE TABLE #Temp1(record nvarchar(512))
BULK INSERT #Temp1 
FROM 'C:\Test\test.txt' 
WITH (ROWTERMINATOR = '\n')

-- 处理首行的BOM字符
SELECT 
    CASE 
        WHEN record LIKE N'%' THEN STUFF(record, 1, 3, N'')
        ELSE record
    END AS cleaned_record
FROM #Temp1

方法三:修改文件去掉BOM

如果是一次性处理的场景,你可以直接修改文件本身:用记事本打开test.txt,选择「另存为」,在编码选项里选择「UTF-8(无BOM)」,保存后再加载就不会有这个问题了。

补充说明

出现这个问题的原因是:SQL Server默认会按系统默认的代码页读取文件,而UTF-8的BOM是三个特殊字节(EF BB BF),被默认解析后就变成了你看到的乱码字符。指定CODEPAGE='65001'相当于告诉SQL Server「这是UTF-8编码的文件,按规则处理」,就能避免这个问题。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:42:40