9
votes

Querifier la base de données MySQL avec SQLDEveloper ne renvoie pas les valeurs correctes

J'ai une base de données MySQL avec un utf8 de toutes les tables. J'utilise SQLDEveloper pour accéder à la base de données avec le dernier pilote JConnector JDBC.

Lors de l'exécution d'une requête simple telle que Sélectionnez 'Варна'; équivalent à Sélectionnez 'Варна' de Dual; , qui contient une langue bulgare, SQLDeveloper retourne ' ????? '. Ceci fait des éléments de la base de données dans lesquels j'ai utilisé le retour de la langue bulgare null , car leur clauses (contenant de la langue bulgare) Mismatch the uft8 bulgare caractères de la base de données. (Lorsque le Select n'utilise pas la langue bulgare sur tout SQLDEveloper retourne des valeurs complètement correctes et affiche la langue bulgare renvoyée à la suite de la requête correctement.)

the Préférences -> Environnement -> Encodage dans SQLDEveloper est défini sur UTF-8 , mais j'ai essayé pratiquement tous les codages applicables énumérés là-bas et même le plus simple Query Sélectionnez 'Варна' à partir dual; ne renvoie toujours pas la valeur correcte Варна .

J'ai regardé dans la définition de la variable nls_lang , pensant que cela peut être la cause mais en vain. (Peut-être que c'est la clé après tout, mais je ne suis pas en mesure de le configurer correctement).

Edit: afin de reproduire le problème et de la visualiser (comme je me rendais compte que je l'ai peut-être expliqué mal) Il suffit d'aller dans SQLDEveloper et de vous connecter à une base de données MySQL et d'exécuter la requête Sélectionnez 'Варна' de Dual; < / code>.

Edit2: Clarifications.

Edit3: Comme indiqué par le commentaire laissé par @Tenhouse, il apparaît que cela peut être un bug.

EDIT4: Comme indiqué ci-dessous en tant que commentaire, la requête ci-dessus Sélectionnez 'Варна' à partir de Dual; fonctionne parfaitement bien sans aucune modification et / ou réglage Fiding sur MySQL Workbench.

EDIT5: S'il vous plaît, n'hésitez pas à corriger le titre et / ou les tags si vous sentez que quelque chose peut être amélioré car il n'y a toujours pas de réponse au problème.

EDIT6: À présent, puis-je supposer que c'est vraiment un bug? Quelqu'un pourrait-il me conseiller où le signaler exactement - est-ce un bogue JConnector ou SQLDEveloper. Je pense que je dois le signaler en tant que bogue SQLDEveloper, mais je préférerais avoir une confirmation avant de perdre leur temps.

Edit7: J'ai essayé de clarifier encore plus loin dans mes espoirs d'une réponse.

EDIT8: (IMPORTANT!) Ma base de données actuelle est hébergée sur le serveur Linux (Ubuntu 12.04, MySQL 5.5.28). Si, toutefois, j'installe MySQL sur une machine à Windows fraîche et crée un utf8 dB là-bas, interrogeant via SQLDEveloper fonctionne comme étant censé, Sélectionnez 'Варна' de Dual; Retourne effectivement Варна . Est-ce que quelqu'un pourrait s'il vous plaît confirmer cela?


4 commentaires

Je ne comprends pas le problème; Je n'utilise pas non plus SQLDEveloper, mais le Workbench MySQL . Si je crée une table avec Charset UTF-8 et insérez des lettres cyrilliques ou mandarines, je peux les sélectionner via une clause WHERE sans aucun problème. Ma connexion a également utilisé UTF-8. Qu'est-ce que "qui contient la langue bulgare (Windows-1251)" signifie? Vous stockez des données Windows-1251 à l'intérieur des tables UTF-8? Cela causerait n'importe quel personnage ...


Lorsque vous utilisez MySQL Workbench, tout semble fonctionner complètement bien. Le DB est UTF8, les données de la DB sont UTF8, les requêtes sont UTF8, tout est génial. Maintenant, lorsque vous utilisez SQLDEveloper, cependant, le DB est UTF8, les données de l'utilisateur sont UTF8, les requêtes que je ne sais pas et ne savez pas comment le réparer, je soupçonne que SQLDEveloper utilise automatiquement un certain codage pour encoder ses requêtes et comme ce n'est probablement pas utf8, cela fait un tel problème


FYI: Je viens de tester le tout avec UTF8 DB, MySQ-Connector 5.1.22, Oracle SQL Developer 3.1.07 et j'ai les mêmes résultats que vous. Peut-être que c'est un bug.


J'utilise la version 3.2.20.09 Oracle SQL Developer, donc je suppose que c'est soit un bogue, soit peut-être qu'il n'y a aucun de nous ne sait comment configurer pour obtenir des résultats corrects.


4 Réponses :


0
votes

Vous pouvez essayer une commande comme ceci :: Alter le jeu de caractères de base de données WE8ISO8859P5;

Veuillez redémarrer la base de données après avoir changé de personnage.

Plus de détails Référez ce lien où il explique le codage requis pour différentes langues

http: //www.csee. UMBC.EDU/PORTAL/HELP/ORACLE8/SERVER.815/A67789/CH3.HTM


3 commentaires

alter Set de la base de données Alter WE8ISO8859P5; RAPPORTS RAPPORT D'ERREUR: Erreur SQL: Ensemble de caractères inconnu: 'we8iso8859p5' . Veuillez noter que la base de données n'est pas une base de données Oracle, mais une base de données MySQL.


Pouvez-vous essayer celui-ci :: modifier la base de données dbname Set de caractère CP1251 Collate CP1251_bulgarian_ci La requête fonctionne bien dans MySQL Workbench l'avez-vous essayé là-bas ??


Je l'ai essayé, toujours en vain. J'ai spécifiquement copié une table dans une nouvelle base de données et avons modifié le charert comme vous l'avez montré ci-dessus afin de le faire. La requête fonctionne définitivement sur MySQL Workbench, mais j'ai un problème là-bas avec un curseur de la souris qui va devenir fou. Je ne peux donc pas l'utiliser correctement pour faire mon travail.



1
votes

Donc, je ne le savais pas moi-même jusqu'à ce que ce problème soit de quelques mois, mais MySQL offre en réalité la capacité de codages différents pour les clients, les bases de données et les connexions. MySQL convertira (ou rassemblera) les demandes / réponses de / à un client à différents codages comme spécifié par le client ou dans son fichier de configuration. Donc, même si la base de données stocke des éléments tels que UTF8, si le client est défini sur Latin1, vous allez voir latine1 comme codage de votre résultat. Le moyen le plus simple de vérifier que cela consiste à tourner une connexion à MySQL et à exécuter la requête suivante: xxx

Vous devez voir un tas de codages entiers pour différentes connexions / sources. De votre description, j'imagine que la plupart d'entre elles seront pas utf8. Voici Doc de MySQL sur ce que chacun de ces identiques. Vous pouvez tester si cela en fait le problème en faisant un nom ou Charset UTF8; (ne me souvient pas de lequel une fois) et d'exécuter vos requêtes à nouveau à Voyez si cela corrige le problème.

Un résumé de ce que chacun de ces gars (puisque les documents laissent des affaires):

  • caractère_set_client: Spécifie comment les données sont codées lors de l'envoi d'un client au serveur. Tout ce qui se connecte via API de MySQL est pas un client (ex. PHP's MySQLI, la plupart des Wrapper C / C ++ Wrapper Libs)
  • caractère_set_database: Spécifie le codage des données stockées dans la base de données
  • caractère_set_filesystem: Pas vraiment sûr, mais je crois comment les données sont écrites sur le disque?
  • caractère_set_results: Le codage que MySQL renvoie les résultats de la requête
  • caractère_set_server: Set par défaut du serveur (pas vraiment sûr des cas où cela est utilisé)
  • caractère_set_system: pas sûr de celui-ci soit
  • caractère_sets_dir: où vos définitions de collation / codage sont situées

    la plupart de ces gars peuvent être spécifiés en modifiant votre my.cnf et en collant vos valeurs par défaut.

    Je ne sais pas comment JConnector fonctionne, mais j'imagine qu'il utilise MySQL C API, auquel cas vous aurez besoin de faire quelque chose comme ce qui suit quelque part dans le code. Peut-être que JConnector a un moyen pour vous de le préparer à travers lui. Je ne suis pas sûr, mais voici la syntaxe de l'API mysql: xxx

    EDIT: pour mysql 5.5


0 commentaires

0
votes

Après que vous vous connectiez avec un mysql_connect: xxx

Vous faites cette requête: xxx

maintenant, cela définira le codage pour ce qui est retourné, que se passe-t-il sur le serveur - donc tout cela a le même codage.

Dans votre requête suivante, vous spécifiez cette connexion à utiliser


0 commentaires

0
votes

Exporter

Ajouter [? Caractencoding = utf8] xxx

Importation


0 commentaires