SQL Server移除表列特殊字符问题:BCP导入后REPLACE替换无效
问题描述
SQL Server里有一张带TEAM列的表,用BCP工具导入数据后,首行TEAM列出现了特殊乱码,具体值如下:
1.Insta Acq
我尝试直接把这些特殊符号复制到REPLACE函数里做替换,但没成功,用的代码是:
REPLACE(TEAM,'1.Insta Acq', '1.Insta Acq' )
表的字段数据类型如下:
| COLUMN_NAME | DATA_TYPE | TYPE_NAME |
|---|---|---|
| TEAM | -9 | nvarchar |
| SOURCE | 12 | varchar |
| STAGE | 12 | varchar |
| TARGET OCT'22 | 4 | int |
表内的示例数据:
| TEAM | SOURCE | STAGE | TARGET OCT'22 |
|---|---|---|---|
| 1.Insta Acq | Website | TB Active / TB Inactive | 9000 |
| 1.Insta Acq | Website | No Offer | 3500 |
解决方案
你看到的∩╗┐是UTF-8字节顺序标记(BOM)被错误解析后的乱码,实际存在于nvarchar字段里的是Unicode字符U+FEFF(零宽无间断空格),直接复制可视化乱码当然匹配不上。
方法1:精准替换Unicode BOM字符
直接针对Unicode值NCHAR(0xFEFF)做替换,注意要加N前缀标识Unicode字符串:
UPDATE 你的表名 SET TEAM = REPLACE(TEAM, NCHAR(0xFEFF), '') WHERE TEAM LIKE N'%' + NCHAR(0xFEFF) + '%';
方法2:移除开头的BOM字符
如果BOM总是出现在字符串开头,也可以直接截断首字符:
UPDATE 你的表名 SET TEAM = STUFF(TEAM, 1, 1, '') WHERE LEFT(TEAM, 1) = NCHAR(0xFEFF);
后续导入预防
下次用BCP导入时,可通过参数避免BOM问题:
- 若导入UTF-8文件,加
-C 65001指定编码,同时确保源文件本身不带BOM; - 或者用
-w参数(适配Unicode字符),搭配对应编码参数,避免解析错误。
内容的提问来源于stack exchange,提问作者qaiser
相关产品推荐
相关产品推荐

