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

Azure Synapse中Parquet数据表情符号显示异常解决方案咨询

解决Azure Synapse中Parquet表情符号显示异常的建议

1. 确认列数据类型与编码匹配

  • 先检查Synapse表中存储表情符号的列类型:必须用nvarchar(max)(原生支持Unicode),如果用了varchar类型,大概率会因为编码不兼容导致表情符号变成??或乱码。
  • 虽然Parquet文件本身默认是UTF-8编码(在线查看器能正常显示也验证了这点),但Synapse读取时如果列类型不对,会直接破坏字符解析。

2. 切换到UTF-8兼容的排序规则

  • 如果表的排序规则是旧版非UTF-8类型(比如SQL_Latin1_General_CP1_CI_AS),会无法识别Unicode补充平面的表情符号。可以修改列的排序规则,执行以下SQL:
ALTER TABLE [你的表名]
ALTER COLUMN [表情列名] NVARCHAR(MAX) COLLATE Latin1_General_100_CI_AS_SC_UTF8;
  • 新建表时直接指定UTF-8排序规则:
CREATE TABLE [新表名] (
    [表情列名] NVARCHAR(MAX) COLLATE Latin1_General_100_CI_AS_SC_UTF8
);

3. 修正外部表的文件格式配置

  • 如果是通过外部表读取Parquet,确保外部文件格式显式指定UTF-8编码:
CREATE EXTERNAL FILE FORMAT Parquet_UTF8
WITH (
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec',
    ENCODING = 'UTF8'
);
  • 绑定这个文件格式到外部数据源,避免Synapse读取时默认使用非UTF-8编码解析。

4. 检查查询工具的显示支持

  • 确认你用的Synapse查询工具(比如Synapse Studio编辑器、Azure Data Studio)是最新版本,旧版本可能对表情符号这类Unicode特殊字符支持不足。
  • 如果用SSMS连接Synapse,确保版本在18.0以上,并且在工具选项里开启了Unicode字符显示。

5. Spark读写的端到端编码控制

  • 如果是通过Spark池读写数据,读取Parquet时默认用UTF-8,但写入SQL池时要明确指定映射到nvarchar类型,同时设置字符集为UTF-8:
df = spark.read.parquet("abfss://容器名@存储账户.dfs.core.windows.net/parquet文件路径")
df.write.format("jdbc") \
  .option("url", "jdbc:sqlserver://你的Synapse工作区.sql.azuresynapse.net:1433;database=你的库") \
  .option("dbtable", "你的表") \
  .option("user", "用户名") \
  .option("password", "密码") \
  .option("charset", "UTF-8") \
  .save()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:33:27