2010-02-18 4 views
1

Je développe une application de connexion à une base de données en Java. Le client a SQL Server et j'ai essayé la version SQLExpress de Microsoft tant que nous ne voulons pas acheter une licence pour le temps de développement. Malheureusement, SQL Server Express n'autorise pas l'accès au réseau, donc nous ne pouvons pas travailler sur le réseau sur la même base de données et devons installer le serveur SQL Server Express sur chaque client développeur.Java passer de MS SQL à MySQL - Jeux de caractères

Aujourd'hui, j'ai décidé de passer à MySQL pendant le processus de développement. J'ai créé une base de données MySQL avec le jeu de caractères UTF8 et exporté les données dans des fichiers CSV que j'ai également convertis en UTF8 et les ai importés. Je me connecte avec Java avec le pilote JDBC et maintenant obtenu un comportement bizarre pendant l'exécution. Les résultats diffèrent complètement du client se connectant à SQL Server. J'ai écrit le SQL à Java colle code myselft et n'utilise pas un cadre comme Hibernate ou JPA. Je suppose que le problème a à voir avec le codage de caractères. Les fichiers de code source ne sont pas encodés avec CP1252 - parce que je viens de commencer à développer dans Eclipse sous Windows et j'ai confiance dans les paramètres par défaut. J'interroge la base de données en obtenant un objet ResultSet et ensuite lire les données avec les méthodes getter fournies par le ResultSet. Je ne fais aucune conversion de caractères pendant la récupération de données.

Le problème est maintenant que je n'obtiens pas de sortie cryptique pas bien encodée mais à la place NullPointerExceptions et gestion de données bizarre. Par exemple: J'ai écrit une méthode qui compare les Jobs (un objet représentant un Job avec un nom, un identifiant, une cargaison et tout ça). Les résultats au cours de l'exécution diffèrent. Certains Jobs sont égaux sur SQL Server et d'autres sur MySQL mais le résultat SQL Server est correct.

Je viens de voir les propriétés de la base de données et j'ai vu que le codage de caractères de SQL Server est en ISO-Latin-1.

Merci pour votre aide et salutations de Cologne, Marco

+0

Veuillez ajouter les parties pertinentes de la pile. –

Répondre

0

Je sais peu de choses sur MS SQL, mais si les données MS SQL est latin1 codé, l'importer dans une base de données UTF-8 sur l'extrémité mySQL doit échouer et entraîner des données brisées.

Je voudrais essayer d'obtenir les données réparées en premier. Pouvez-vous réessayer le processus sans convertir le fichier de vidage, et une base de données latin1 dans mySQL?

De plus, il semble être notable differences dans les types de données entre mySQL et MS SQL:

Attention lors de la planification: vous voulez faire correspondre les types de données par la capacité et pas nécessairement par son nom. Par exemple: un VARCHAR MySQL peut contenir jusqu'à 255 caractères, tandis qu'un VARCHAR SQL Server peut contenir jusqu'à 4000 caractères. Dans ce cas, vous devez utiliser un type de colonne MySQL TEXT au lieu de VARCHAR.

+0

J'ai exporté les données depuis Excel et j'ai ouvert le CSV avec un éditeur. Là, j'ai converti le jeu de caractères de Latin1 en UTF8. Cela a fonctionné, car les caractères dans MySQL sont affichés correctement. Mais peut-être que je vais refaire toutes les choses et créer une base de données Latin1 ... – Marco

+0

@Marco Ah, je vois, ce processus devrait fonctionner. Un transfert pur Latin1 serait encore utile d'essayer je pense. Il serait bon de voir quelques exemples de données (à quoi ressemblent les différences). De plus, voir ma réponse mise à jour, c'est peut-être aussi un pointeur. –

Questions connexes