Snowflake使用PUT上传含特殊字符CSV时UTF-8编码异常问题解决咨询
解决Snowflake读取UTF-16编码CSV文件的乱码问题
从你给出的错误信息里的0xFF0xFE字节序列可以判断,你的CSV文件是UTF-16 LE编码(带字节顺序标记BOM),而Snowflake默认的文件格式使用UTF-8编码解析,这就是导致UTF-8验证错误、特殊字符丢失和出现意外空格的核心原因。
解决方案:修改文件格式指定正确编码
你只需要在文件格式中明确指定编码为UTF16,Snowflake会自动识别UTF16的BOM并正确解析文件内容:
CREATE OR REPLACE FILE FORMAT demo_file_format TYPE = 'CSV' FIELD_DELIMITER = ',' ENCODING = 'UTF16';
验证查询
用修改后的文件格式查询阶段内容:
SELECT C.$1 FROM @demo_stage (file_format => 'demo_file_format') C;
这样就能正确读取包含特殊字符(比如Compañía里的ñ)的字段,不会出现乱码和多余空格。
为什么之前的方法无效?
- 当你设置
VALIDATE_UTF8 = FALSE时,Snowflake会跳过UTF-8格式校验,但它仍然以UTF-8的方式解析文件。由于UTF16每个字符占用2个字节(比如字母C在UTF16LE中是0x43 0x00),解析时会把第二个空字节当成独立的UTF-8字符,表现为空格;而像ñ这类特殊字符的UTF16字节序列在UTF-8中是无效的,所以会显示为�。
内容的提问来源于stack exchange,提问作者Devom
相关产品推荐
相关产品推荐

