Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

CoqBlog

.NET is good :-)
{ Blog de coq }

Actualités

SQL Server : Outil osql : attention à l'encoding des fichiers de scripts SQL...

Si jamais vous ne faites pas attention à l'encoding et que vous enregistrez vos fichiers SQL avec ce bon vieux codepage 1252 (ou autres), vous risquez quelques problèmes à l'execution des scripts.

Les outils graphiques comme l'analyseur de requêtes ne poseront normalement pas problème, et sqlcmd non plus.
Par contre si jamais vous travaillez pour SQL Server 2000 et que les outils clients SQL Server 2005 ne sont pas envisageables pour executer les scripts, vous passerez par osql, l'ancêtre de sqlcmd, qui se fera sans doute un plaisir de mal décoder vos fichiers...

Vous avez 2 solutions :

  • réenregistrer les fichiers avec le codepage OEM de la machine qui va executer osql, pour que ce dernier décode correctement... (mais sqlcmd aura sans doute quelques problèmes avec...)
  • utiliser Unicode (UTF-16 LE, CodePage 1200) pour qu'osql n'ai pas a décoder

Prenont le script suivant, enregistré dans différents encodings :

PRINT N'Bonjour, je suis un texte plutôt sympathique avec mes caractères "spéciaux".'
GO

Executés avec osql :

------------
UTF16LE.sql
Bonjour, je suis un texte plutôt sympathique avec mes caractères "spéciaux".
------------
UTF16BE.sql
Msg 102, Level 15, State 1, Server COQPRTBL, Line 1
Incorrect syntax near ' '.
------------
850.sql
Bonjour, je suis un texte plutôt sympathique avec mes caractères "spéciaux".
------------
1252.sql
Bonjour, je suis un texte plut¶t sympathique avec mes caract_res "spUciaux".

Les mêmes avec sqlcmd :

------------
UTF16LE.sql
Bonjour, je suis un texte plutôt sympathique avec mes caractères "spéciaux".
------------
UTF16BE.sql
Bonjour, je suis un texte plutôt sympathique avec mes caractères "spéciaux".
------------
850.sql
Bonjour, je suis un texte plut"t sympathique avec mes caractSres "sp,ciaux".
------------
1252.sql
Bonjour, je suis un texte plutôt sympathique avec mes caractères "spéciaux".

 

Comme vous allez probablement utiliser la seconde solution, voici un petit script PowerShell, relativement bateau, permettant de déterminer facilement la liste des fichiers sql qui ne seraient peut être pas enregistrés avec le bon encoding, histoire d'éviter les mauvaises surprises...
Pour celà, je me sert du préambule caractérisant l'UTF-16 Little Endian : FF FE (si vous chercher un éditeur hexa pour voir ça, jetez un oeil à HxD)

$path = $args[0]
if(!$path) { $path = Get-Location }

Get-ChildItem $path -force -recurse -include "*.sql" |
foreach {
    $reader=$_.OpenRead()
    if ( $reader.Length -lt 2 -or ( $reader.ReadByte() -ne 0xFF -or $reader.ReadByte() -ne 0xFE ) )
    {
        Write-Host "A VERIFIER : " -noNewLine
        Write-Host $_.FullName
    }
    $reader.Close()
}

A noter que je ne fais pas la distinction entre UTF-16 LE et UTF-32 LE, qui aurait nécessiter d'approfondir le test en regardant si le préambule est FF FE 00 00.

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: samedi 4 août 2007 00:08 par coq

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Changer l’adresse d’une ferme Office Web Apps associée à SharePoint par Blog de Jérémy Jeanson le il y a 2 heures et 57 minutes

- Une ferme #SharePoint 2013 dans @Azure en quelques clics (1ère partie) ! par Le blog de Patrick [MVP SharePoint] le 08-28-2014, 18:52

- SharePoint 2013: Préparation de la migration - Création des site Templates dans 2010 et 2013 par Blog Technique de Romelard Fabrice le 08-20-2014, 16:31

- [ #Yammer ] How to change interface language ? Comment changer la langue de l’interface ? par Le blog de Patrick [MVP SharePoint] le 08-20-2014, 14:21

- Onedrive Sync Engine Host : CPU à 100% par Le petit blog de Pierre / Pierre's little blog le 08-06-2014, 22:22

- SharePoint : Bug sur la gestion des permissions et la synchronisation Office par Blog Technique de Romelard Fabrice le 07-10-2014, 11:35

- SharePoint 2007 : La gestion des permissions pour les Workflows par Blog Technique de Romelard Fabrice le 07-08-2014, 11:27

- TypeMock: mock everything! par Fathi Bellahcene le 07-07-2014, 17:06

- Coding is like Read par Aurélien GALTIER le 07-01-2014, 15:30

- Mes vidéos autour des nouveautés VS 2013 par Fathi Bellahcene le 06-30-2014, 20:52