向Microsoft Server Management Studio v18.9.1导入CSV后部分标题带问号
UTF-8格式CSV导入SQL Server后字段末尾出现问号的根本原因
- 不可见控制字符转码失败
带特殊字符的字段末尾存在CSV编辑阶段残留的零宽度空格、软换行等C0/C1控制字符,常规文本编辑器以UTF-8格式打开时不会显示这类字符。当目标表对应列的排序规则为非UTF8兼容规则(如默认的SQL_Latin1_General_CP1_CI_AS)时,无对应映射的控制字符会被统一替换为问号显示。 - 导入工具编码识别错误
部分版本的SSMS导入向导不会自动识别UTF8 BOM标识,默认会采用系统默认ANSI编码解析文件。多字节的UTF8特殊字符被单字节编码解析时,末尾多余的字节会被判定为非法字符,最终显示为问号。 - 目标列存储类型不支持Unicode
若目标列采用char/varchar这类非Unicode存储类型,即便导入阶段编码解析正确,超出当前排序规则字符集范围的字符也会被替换为问号存储。
修复方案
- 用Notepad++等工具打开CSV,开启「显示所有字符」功能,删除字段末尾残留的不可见控制字符
- SSMS导入向导的「选择平面文件源」步骤,手动将文件编码调整为
65001 (UTF-8),不要使用默认ANSI编码 - SQL Server 2019及以上版本,可将目标列调整为
nvarchar类型,排序规则改为Latin1_General_100_CI_AS_SC_UTF8这类原生支持UTF8的规则
问题参考截图

内容的提问来源于stack exchange,提问作者jubibanna
相关产品推荐
相关产品推荐

