Share via


Résolution des problèmes de lecture de texte UTF-8 à partir de fichiers CSV ou Parquet à l’aide d’un pool SQL serverless dans Azure Synapse Analytics

Cet article décrit les étapes de résolution des problèmes de lecture de texte UTF-8 à partir de fichiers CSV ou Parquet à l’aide d’un pool SQL serverless dans Azure Synapse Analytics.

Lorsque le texte UTF-8 est lu à partir d’un fichier CSV ou PARQUET à l’aide d’un pool SQL serverless, certains caractères spéciaux, tels que ü et ö, sont convertis de manière incorrecte si la requête retourne des colonnes VARCHAR avec des classements non-UTF8. Il s’agit d’un problème connu dans SQL Server et SQL Azure. Le classement non-UTF8 étant l’option par défaut dans Synapse SQL, les requêtes des clients seront affectées. Il se peut que des clients utilisant des caractères anglais standard et certains sous-ensembles de caractères latins étendus ne remarquent pas les erreurs de conversion. La conversion incorrecte est expliquée plus en détail dans l’article Always use UTF-8 collations to read UTF-8 text in serverless SQL pool (Toujours utiliser les classements UTF-8 pour lire du texte UTF-8 dans un pool SQL serverless)

Solution de contournement

La solution à ce problème consiste à toujours utiliser le classement UTF-8 lors de la lecture de texte UTF-8 à partir de fichiers CSV ou PARQUET.

  • Dans de nombreux cas, vous devez simplement définir le classement UTF8 sur la base de données (opération sur les métadonnées).

    alter database MyDB
           COLLATE Latin1_General_100_BIN2_UTF8;
    
  • Vous pouvez définir explicitement le classement sur une colonne VARCHAR dans OPENROWSET ou dans une table externe :

    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
    
  • Si vous n’avez pas spécifié le classement UTF8 sur les tables externes qui lisent les données UTF8, vous devez recréer les tables externes affectées et définir le classement UTF8 sur les colonnes VARCHAR (opération sur les métadonnées).

Étapes suivantes