在 Azure Synapse Analytics 中使用無伺服器 SQL 集區讀取 CSV 或 Parquet 檔案中 UTF-8 文字的疑難排解

本文提供在 Azure Synapse Analytics 中使用無伺服器 SQL 集區,從 CSV 或 Parquet 檔案讀取 UTF-8 文字時的疑難排解步驟。

使用無伺服器 SQL 集區從 CSV 或 PARQUET 檔案讀取 UTF-8 文字時,如果查詢傳回具有非 UTF8 定序的 VARCHAR 資料行,則系統不會正確轉換某些特殊字元 (例如 ü 和 ö)。 這是 SQL Server 和 Azure SQL 的已知問題。 由於非 UTF8 定序是 Synapse SQL 中的預設值,因此客戶查詢將會受到影響。 使用標準英文字元和部份擴充拉丁字元子集的客戶可能不會注意到轉換錯誤。 在一律使用 UTF-8 定序讀取無伺服器 SQL 集區中的 UTF-8 文字 \(英文\) 中,會更詳細說明不正確的轉換

因應措施

解決此問題的因應措施是從 CSV 或 PARQUET 檔案讀取 UTF-8 文字時,一律使用 UTF-8 定序。

  • 在多數情況下,您只需要在資料庫 (中繼資料作業) 上設定 UTF8 定序。

    alter database MyDB
           COLLATE Latin1_General_100_BIN2_UTF8;
    
  • 您可以在 OPENROWSET 或外部資料表中的 VARCHAR 資料行上明確定義定序:

    select geo_id, cases = sum(cases)
    from openrowset(
             bulk 'latest/ecdc_cases.parquet', data_source = 'covid', format = 'parquet'
         ) with ( cases int,
                  geo_id VARCHAR(6) COLLATE Latin1_General_100_BIN2_UTF8 ) as rows
    group by geo_id
    
  • 如果您未在讀取 UTF8 資料的外部資料表上指定 UTF8 定序,則必須重新建立受影響的外部資料表,並在 VARCHAR 資料行上設定 UTF8 定序 (中繼資料作業)。

下一步