Řešení potíží se čtením textu UTF-8 ze souborů CSV nebo Parquet pomocí bezserverového fondu SQL v Azure Synapse Analytics

Tento článek obsahuje postup řešení potíží pro čtení textu UTF-8 ze souborů CSV nebo Parquet pomocí bezserverového fondu SQL v Azure Synapse Analytics.

Při čtení textu UTF-8 ze souboru CSV nebo PARQUET pomocí bezserverového fondu SQL jsou některé speciální znaky jako ü a ö nesprávně převedeny, pokud dotaz vrátí sloupce VARCHAR s kolacemi, které nejsou UTF8. Jedná se o známý problém v SQL Server a Azure SQL. Kolace bez UTF8 je v Synapse SQL výchozí, takže to ovlivní dotazy zákazníků. Zákazníci, kteří používají standardní anglické znaky a podmnožinu znaků rozšířené latinky, si nemusí všimnout chyb převodu. Nesprávný převod je podrobněji vysvětlen v tématu Vždy používat kolace UTF-8 ke čtení textu UTF-8 v bezserverovém fondu SQL.

Alternativní řešení

Alternativním řešením tohoto problému je vždy používat kolaci UTF-8 při čtení textu UTF-8 ze souborů CSV nebo PARQUET.

  • V mnoha případech stačí nastavit kolaci UTF8 v databázi (operace metadat).

    alter database MyDB
           COLLATE Latin1_General_100_BIN2_UTF8;
    
  • Můžete explicitně definovat kolaci pro sloupec VARCHAR v OPENROWSET nebo externí tabulce:

    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
    
  • Pokud jste u externích tabulek, které čtou data UTF8, nezadali kolaci UTF8, musíte znovu vytvořit ovlivněné externí tabulky a nastavit kolaci UTF8 u sloupců VARCHAR (operace metadat).

Další kroky