2009-08-31 8 views
0

l'environnement Mysql suit:de caractères dans une base MySQL

character_set_database="big5" 

Et quand j'envoie une requête SQL qui contient tranditional chinois

(tels que « select * from a où name = « 中«)

de jdbc à la base de données MySQL, il va jeter l'exception suivante:

Illegal mix of collations (big5_chinese_ci,IMPLICIT), (latin1_swedish_ci,COERCIBLE), (latin1_swedish_ci,COERCIBLE) for operation ' IN '' 

Comment puis-je résoudre ce problème?

Mais nous devons faire cela entre Oracle et mysql, et quand mon programme obtient les données de Oracle (son codage est ISO-8859-1) et le passe dans l'instruction SQL dans JDBC, il aura un tel problème, mais je ne peux pas changer la collation d'oracle. Comment résoudre ceci? Pourquoi JSP ne peut pas résoudre cela automatiquement?

J'ai essayé de convertir mais les caractères chinois ne peuvent pas être sauvegardés dans le jeu de caractères Latin1. cela peut-il causer le problème?

Répondre

1

Vérifiez vos classements. La base de données elle-même peut avoir un classement et les tables une autre totalement différente. Si vous mélangez des classements provenant de deux tables, vous obtenez cette erreur.

En outre, la collation suédoise semble être la valeur par défaut pour les bases de données (n'ont aucune idée de pourquoi).

+0

À quoi servent les classements? – MemoryLeak

+0

donc vous voulez dire cela un problème de réglage de base de données, mais pas parce que l'encodage dans mon code jsp a un problème? – MemoryLeak

+0

Dans votre question, vous ne parliez que de MySQL. Mais, oui, c'est un problème de base de données. Un classement est un ensemble de règles permettant de comparer des caractères dans un jeu de caractères http://dev.mysql.com/doc/refman/5.1/en/charset-general.html Modifiez toutes vos tables afin qu'elles partagent toutes le même classement. C'est seulement nécessaire entre les tables d'interaction, mais mieux vaut prévenir que guérir. –

0

Quel est votre encodage dans votre projet java? Avez-vous veillé à ce que ce soit aussi un gros 5?

+0

Ils sont utf-8, je pense. – MemoryLeak

0

JSP ne peut pas résoudre le problème. Comment JSP devrait-il savoir ce que vous voulez?

Effectuez-vous une transformation d'encodage dans votre JSP ou placez-vous simplement les données oracle dans la base de données mysql?

En général, il est important d'avoir le même encodage dans votre script, vos tables et très important dans la connexion à la base de données.

+0

ont essayé de convertir, mais les caractères chinois ne peuvent pas être enregistrés dans le jeu de caractères Latin1. cela pourrait-il causer le problème? – MemoryLeak

+0

Vous ne pouvez pas convertir les caractères chinois en Latin1, vous pouvez essayer de le convertir en utf, peut-être que cela fonctionnera, mais le meilleur moyen est d'avoir dans chaque partie de votre système le même encodage, sinon vous rencontrerez des problèmes . – Joerg

+0

ET ne pas oublier d'utiliser le bon jeu de caractères pour la connexion à la db: http://dev.mysql.com/doc/refman/5.1/fr/charset-connection.html – Joerg

Questions connexes