2008-10-16 7 views
1

et peut-il être configuré pour ne pas se produire?Pourquoi SQL Management Studio génère-t-il des caractères séparés nuls lors de l'enregistrement en tant que csv?

Je me retrouve généralement à enregistrer le résultat d'une requête en tant que fichier .csv et à le traiter plus tard sur mon ordinateur Unix. Les caractères étant séparés par des zéros, je dois filtrer ces caractères et c'est un peu pénible.

Donc, ce sont les questions suivantes:

  • Pourquoi est-ce donc?

EDIT:

Parce qu'il émet en UTF-16 par défaut. conversion serait alors facile:

iconv -f utf-16 -t utf-8 origFile.csv > newFile.csv 
  • Peut-il être désactivé en quelque sorte? Comment?

Voici une partie d'un hexdump d'un fichier ainsi généré. Chaque omble chevalier est suivi d'un char (00) null:

00000cf0 36 00 36 00 32 00 0d 00 0a 00 36 00 38 00 34 00 |6.6.2.....6.8.4.| 
00000d00 30 00 36 00 32 00 31 00 36 00 0d 00 0a 00 36 00 |0.6.2.1.6.....6.| 
00000d10 38 00 34 00 30 00 36 00 33 00 36 00 34 00 0d 00 |8.4.0.6.3.6.4...| 
00000d20 0a 00 36 00 38 00 34 00 30 00 36 00 38 00 34 00 |..6.8.4.0.6.8.4.| 
00000d30 32 00 0d 00 0a 00 36 00 38 00 34 00 30 00 37 00 |2.....6.8.4.0.7.| 
00000d40 30 00 32 00 31 00 0d 00 0a 00 36 00 38 00 34 00 |0.2.1.....6.8.4.| 
00000d50 30 00 37 00 37 00 39 00 37 00 0d 00 0a 00 36 00 |0.7.7.9.7.....6.| 
00000d60 38 00 34 00 30 00 37 00 39 00 32 00 31 00 0d 00 |8.4.0.7.9.2.1...| 
00000d70 0a 00 36 00 38 00 34 00 30 00 38 00 32 00 34 00 |..6.8.4.0.8.2.4.| 
00000d80 31 00 0d 00 0a 00 36 00 38 00 34 00 30 00 38 00 |1.....6.8.4.0.8.| 
00000d90 36 00 36 00 31 00 0d 00 0a 00 36 00 38 00 34 00 |6.6.1.....6.8.4.| 
00000da0 30 00 38 00 37 00 35 00 31 00 0d 00 0a 00 36 00 |0.8.7.5.1.....6.| 
00000db0 38 00 34 00 31 00 30 00 32 00 35 00 34 00 0d 00 |8.4.1.0.2.5.4...| 
00000dc0 0a 00 36 00 38 00 34 00 31 00 30 00 34 00 34 00 |..6.8.4.1.0.4.4.| 

Répondre

6

Le fichier est en Unicode émis, non ASCII. Unicode utilise deux fois plus de bits pour représenter chaque caractère, d'où les 00 précédents.

Il peut être possible d'enregistrer en ANSI ou ASCII, qui doit utiliser des caractères de 8 bits.

+0

Oui, je suis tellement habitué à l'UTF-8 que j'oublie UTF-16. –

+0

Mais je ne vois pas d'option pour régler l'encodage –

1

Sous Unix, je suggère l'utilisation de iconv -futf-16le -tutf-8 pour filtrer votre sortie. :-)

+0

Oui, je l'avais déjà fait :). Pourquoi le? –

+0

Parce qu'il y a une grande variété endienne où l'octet NUL vient en premier. :-) –

+0

Donc sur cette note, vous devriez réviser votre message pour dire que l'octet NUL suit réellement le "vrai" octet, et non le précède. :-) –

2

Je sais que c'est un ancien poste ... mais pour les nouveaux visiteurs ...

Lorsque vous enregistrez des données de Microsoft SQL Management Studio, vous remarquerez que le bouton « Save » a petite flèche à côté. Si vous sélectionnez la petite flèche, vous pouvez sélectionner 'Save With Encoding ...' cela vous permettra de sélectionner l'encodage que vous désirez.

+0

Excellent! Merci. –

Questions connexes