SQL Server - Convertir varchar à un autre classement (page de code) pour fixer l'encodage des caractères
Je suis de l'interrogation d'une base de données SQL Server qui utilise le SQL_Latin1_General_CP850_BIN2 classement. L'une des lignes de la table a une colonne varchar avec une valeur qui inclut le +/- caractère (code décimal 177 dans le Windows-1252 page de codes).
Quand j'ai une requête à la table directement dans SQL Server Management Studio, je reçois un charabia caractère au lieu de +/- personnage dans cette ligne. Lorsque j'utilise cette table comme source dans un package SSIS, la table de destination (qui utilise le typique SQL_Latin1_General_CP1_CI_AS classement), se termine avec la corriger de +/- caractère.
J'ai maintenant de construire un mécanisme qui interroge directement la table source sans SSIS. Comment dois-je faire cela d'une manière que je reçois le caractère correct au lieu de charabia? J'imagine que j'aurais besoin pour le convertir/cast de la colonne pour le classement SQL_Latin1_General_CP1_CI_AS mais qui ne fonctionne pas comme je reçois un charabia de caractère.
J'ai essayé suivantes avec pas de chance:
select
columnName collate SQL_Latin1_General_CP1_CI_AS
from tableName
select
cast (columnName as varchar(100)) collate SQL_Latin1_General_CP1_CI_AS
from tableName
select
convert (varchar, columnName) collate SQL_Latin1_General_CP1_CI_AS
from tableName
Ce que je fais mal?
{ }
) sur la barre d'outils editeur de bien le format et la surbrillance de la syntaxe!OriginalL'auteur lunadesign | 2011-11-11
Vous devez vous connecter pour publier un commentaire.
Jeu de caractères conversion est effectuée implicitement sur la base de données au niveau de la connexion. Vous pouvez forcer la conversion automatique off dans l'ODBC ou chaîne de connexion ADODB avec le paramètre "Auto Translate=False". Ce n'est PAS recommandé.
Voir: https://msdn.microsoft.com/en-us/library/ms130822.aspx
Il y a eu une page de codes incompatibilité dans SQL Server 2005 lorsque la Base de données Client et de page de codes ne correspondent pas.
https://support.microsoft.com/kb/KbView/904803
SQL-Console de Gestion 2008 de et vers le haut est une application UNICODE. Toutes les valeurs saisies ou demandées sont interprétés comme tels sur le niveau de l'application. La Conversation vers et à partir de la colonne de classement est fait implicitement. Vous pouvez le vérifier avec:
Ce sera le retour de
0xB100
qui est le caractère Unicode U+00B1 (entré dans la Gestion de la fenêtre de la Console). Vous ne peut pas désactiver l'option "Auto Translate" pour la Gestion de Studio.Si vous spécifiez un autre classement dans la sélectionnez, vous, se retrouver éventuellement dans un double conversion (perte de données possible) en tant que "Auto Translate" est toujours actif. Le caractère original est d'abord transformé pour le classement de nouveau au cours de la sélection, qui à son tour est "Auto Traduit par" à la "bonne" application de codes. C'est pourquoi le CLASSEMENT de vos divers essais montrent encore tous le même résultat.
Vous pouvez vérifier que la spécification du classement N'ont un effet dans le sélectionner, si vous avez jeté le résultat comme
VARBINARY
au lieu deVARCHAR
si le Serveur SQL de transformation n'est pas infirmée par le client avant qu'il soit présenté:Cela vous aidera à
0xF1
ou0xB1
respectivement sicolumnName
contient le caractère '±'Vous pouvez encore obtenir le résultat correct et encore un mauvais caractère, si la police que vous utilisez ne donne pas le glyphe.
Veuillez vérifier la réelle représentation interne de votre personnage par la coulée de la requête à
VARBINARY
sur un échantillon et vérifier si ce code correspond bien à la définition de classement de base de donnéesSQL_Latin1_General_CP850_BIN2
Des différences dans la demande de classement et de classement de base de données peut passer inaperçu aussi longtemps que la conversion se fait toujours de la même façon dans et hors. Problèmes émergent dès que vous ajoutez un client avec un classement différent. Alors vous trouverez peut-être que la conversion interne est incapable de faire correspondre les caractères correctement.
Tout ce que dit, vous devriez garder à l'esprit que la Gestion de Studio n'est généralement pas la finale de référence lors de l'interprétation des résultats. Même si cela ressemble à du charabia dans la SEP, il pourrait être le bon de sortie. La question est de savoir si les enregistrements à afficher correctement dans vos applications.
OriginalL'auteur Robert Orso
Doit être utilisé pour convertir les, pas de cast:
(http://blog.sqlpositive.com/2010/03/using-convert-with-collate-to-strip-accents-from-unicode-strings/)
OriginalL'auteur castleless
Avons-nous besoin de plus d'informations. Voici ce que j'ai fait de la reproduire sur SQL Server 2008:
Résultats montrent le caractère original. Déclarant classement dans la requête doit retourner le bon de caractères à partir de SQL Server du point de vue cependant, il peut être le cas que la couche de présentation est de le convertir ensuite à quelque chose de différent, comme UTF-8.
OriginalL'auteur Thomas
essayer:
OriginalL'auteur user1403869