如何解决SSMS无法识别Excel导出的未知编码匈牙利语数据问题?
解决匈牙利姓名编码乱码问题
一、先明确编码类型
你遇到的乱码是典型的**UTF-8编码被错误解析为Latin-1(ISO-8859-1)**导致的:
- 正确字符
á的UTF-8二进制是0xC3 0xA1,如果用Latin-1解码,就会被拆成Ă(0xC3)和ˇ(0xA1),和你碰到的Oláh对应Oláh完全匹配。
二、修复已有的乱码数据
1. 在SSMS中批量修正
如果数据已经导入SSMS,可执行以下SQL语句批量修复:
UPDATE 你的表名 SET 姓名列 = CAST(CAST(姓名列 AS VARCHAR(MAX)) AS VARBINARY(MAX)) COLLATE Latin1_General_100_CI_AS
原理:把按Latin-1解析的乱码字符转成二进制字节流,再用UTF-8对应的排序规则重新解析,还原正确字符。
2. Excel预处理后重新导入
- 打开乱码的xlsx文件,选中姓名列复制到记事本(记事本默认以UTF-8读取字节),此时乱码会自动恢复为正确字符;
- 将记事本内容复制回Excel,保存后再导入SSMS即可。
三、避免后续导入出现乱码
1. SSMS导入时指定编码
使用SSMS「导入数据」向导时:
- 选择Excel数据源后,进入「数据转换」步骤,找到姓名列,将数据类型设为
nvarchar,编码选择UTF-8; - 或在「高级」选项中,强制设置列的代码页为
65001(UTF-8的官方代码页编号)。
2. 导出Excel时强制UTF-8编码
如果是从其他工具导出到Excel:
- 优先选择导出为CSV格式,导出时明确指定编码为「UTF-8(带BOM)」,再用Excel打开该CSV文件,特殊字符会正常显示;
- 若必须导出为xlsx,确认导出工具的编码设置为UTF-8,避免默认使用系统编码(如Windows-1252)。
内容的提问来源于stack exchange,提问作者cafxne
相关产品推荐
相关产品推荐

