Est-il possible de disposer de SQL Server convertir classement de l'UTF-8 / UTF-16
Dans un projet que je suis en train de travailler sur mes données stockées dans SQL Server, avec le classement Danish_Norwegian_CI_AS
. Les données de sortie de l'ed par FreeTDS et ODBC, python qui gère les données en UTF-8. Certains personnages, comme å, ø æ, ne sont pas codé correctement, provoquant l'avancement du projet à paralysée.
J'ai passé quelques heures à lire sur le monde déroutant de codages, de classement et de code-pages, et se sentir comme j'ai eu une meilleure compréhension de l'ensemble de l'image.
Certains des articles que j'ai lu, me fait penser qu'il serait possible de: Spécifier dans l'instruction SQL select, que la collecte de données doit être encodé en UTF-8 quand il est sortie ed.
La raison pour laquelle je pense c'est possible, est cet article qui montre un exemple de la façon d'obtenir de tables, avec des classements différents, jouer bien ensemble.
Tous les pointeurs dans le sens de la conversion de classement de l'UTF-8 /UTF-16, serait grandement apprécié!
EDIT: j'ai lu que SQL Server fournit une option unicode par nchar
, nvarchar
et ntext
, et que les autres variables de chaîne char
, varchar
et text
sont codées selon le classement. J'ai aussi lu que le ci-dessus mentionné unicode options sont codés en utf-16 variante ucs-2 (j'espère que je suis se souvenir de ce droit). Ainsi, afin de permettre à des tables de paramètres régionaux de classement et d'unicode, jouer nice, il devrait y avoir une fonction de conversion, non?
create table a(.....) DEFAULT CHARSET=utf8;
et de la connexion à la base de données à l'aide de ' "jdbc:mysql://localhost/testDb?useUnicode=true&characterEncoding=UTF-8";
je suppose qu'il doit y avoir moyen avec MS SQL severJe vous remercie pour votre contribution. Malheureusement, la table est déjà créé et renseigné, ce n'est donc pas une option pour moi.
faire un essai avec un nouveau tableau et insérer des données de test juste pour être sûr que cela fonctionne. si il fait un
alter table
Vous pouvez mettre par domaine d'encodage classement dans SqlServer. Donc, vous auriez besoin d'un second champ avec l'autre encodage. Je voudrais faire cela en mémoire de la table temporaire avec un classement explicite sur deux champs. Les données dans les deux champs peuvent sembler identiques, mais l'une a votre classement différent. Si cela fonctionne, alors vous pouvez affiner un peu plus. Aussi je voudrais essayer un changement de type de codage sur le côté de client indépendant de Sql. À partir de l'UTF-8 en binaire danois norvégien.
Il est donc possible de modifier l'ensemble de la table? Le problème, c'est qu'à la base de données est utilisée par notre système ERP. Par conséquent, la modification de l'encodage n'est pas une option :S j'ai pour obtenir la sortie de la compilation des tableaux, comme utf-8 ou utf-16..
OriginalL'auteur Rookie | 2015-05-16
Vous devez vous connecter pour publier un commentaire.
4 mois, j'ai finalement trouvé la réponse à mon problème. Il s'avère qu'elle n'avait rien à voir avec la FreeTDS pilote, ou le classement de base de données:
Il a été pyodbc de la fonction connect, qui, apparemment, nécessite un drapeau;
unicode_results=True
Posté ici pour aider les autres malheureux soules condamnés à errer sans but dans l'obscurité, à la recherche d'un indice.
OriginalL'auteur Rookie
Il semble que SQL ne supporte pas l'UTF-8 (voir ici), mais vous pouvez essayer de modifier le classement dans le sélectionner comme:
Vous pouvez également supprimer les accents à l'aide de cette solution: Comment faire pour supprimer les accents et tous les caractères <> a..z dans sql-server?
Une autre solution pourrait être de la coulée de votre colonne type de données nvarchar
où le Compte est de type varchar sur votre premier tableau.
Si par exemple vous essayer:
le résultat final sera "þ"
CAST()
travaillé! Je vous remercie pour cette.OriginalL'auteur sbiz