Azure Synapse Serverless命令显示特殊字符而非中文的问题求助
Azure Synapse Serverless 查询中文显示问号的解决方法
核心解决步骤
- 确认数据写入编码:Delta/Parquet默认存储UTF-8字符串,若写入环节(如Spark作业)使用了GBK/GB2312等非UTF-8编码,会导致读取乱码。需确保写入时指定UTF-8编码,比如Spark写Delta时添加配置
option("encoding", "UTF-8")。 - 强制指定Unicode列类型:OPENROWSET默认可能将字符串解析为非Unicode的VARCHAR类型,需手动通过
WITH子句定义列类型为NVARCHAR,避免后续转换失效:
SELECT PurchaseOrderLineDescription, PurchaseOrderLineDescription COLLATE Chinese_PRC_CI_AI AS PurchaseOrderLineDescription1 FROM OPENROWSET( BULK 'https://dbstorageda0s.dfs.core.windows.net/BC2.0-IP/TransformLayer/Facts/Views/CoupaPurchaseOrder/', FORMAT = 'DELTA' ) WITH ( PurchaseOrderNumber VARCHAR(50), PurchaseOrderLineDescription NVARCHAR(MAX) ) AS coupapurchaseorder_ipspend_test WHERE PurchaseOrderNumber IN ('4523955603', 'PO15044020', 'PO15164185');
- 检查终端编码设置:Synapse查询窗口或SSMS连接时,需确保终端编码为UTF-8或GB2312,避免因终端无法解析Unicode字符显示问号。
- 正确应用排序规则:若原始列是VARCHAR类型,需先转换为NVARCHAR再指定排序规则,示例:
CAST(PurchaseOrderLineDescription AS NVARCHAR(MAX)) COLLATE Chinese_PRC_CI_AI
内容的提问来源于stack exchange,提问作者Abhishek Tyagi
相关产品推荐
相关产品推荐

