Comment définir les propriétés useUnicode = true et characterEncoding = utf8 sur une connexion JDBC MySQL gérée par Spring
Je suis actuellement à la construction d'un Spring MVC webapp et la base de données est vitale backend partie. Quelle que soit la raison, toutefois, le Printemps refuse de traiter les données en UTF-8. Depuis les points de vue, des ressources et des navigateurs sont configurés pour Unicode, et sont donc les tables dans la base de données (et aussi la lecture de quelques questions similaires posées), j'ai établi que le problème réside dans la connexion de base de données.
Le Pilote JDBC doit être fourni deux éléments dans connectionProperties: useUnicode (mis à oui et characterEncoding (mis à utf8). Il s'avère, cependant, il est impossible.
JDBC est un haricot, et en tant que tel est configuré via un fichier XML, comme suit:
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/<database>" />
<property name="username" value="<not telling>" />
<property name="password" value="<not telling>" />
Cette configuration convertit tous les caractères non-alphanumériques tiré de la base de données (telles que des flèches, ou des lettres grecques) en points d'interrogation. Ce qui est évidemment inacceptable.
J'ai essayé plusieurs solutions: spécifié l'URL JDBC comme jdbc:mysql://localhost:3306/<database>?useUnicode=yes&characterEncoding=utf8
joué avec my.ini
fichier (et MySQL Workbench) à force de tout dans la base de données par défaut pour utf8
charset, et quelque chose qui a causé le plus grand des maux de tête: l'ajout de <property name="connectionProperties" value="useUnicode=yes;characterEncoding=utf8" />
. S'avère, il est littéralement impossible de définir deux connectionProperties au sein d'un seul haricot, parce que... il n'y a aucun caractère de séparation mentionné nulle part (la fève va tenter de le lire car en essayant de mettre en yes;characterEncoding=utf8
que la valeur de useUnicode
). Donc ma question est: comment je utf8?
source d'informationauteur Haxton Fale
Vous devez vous connecter pour publier un commentaire.
Le problème peut être causé par la spécification de utf8 et pas UTF-8. De En utilisant des Jeux de Caractères et Unicode:
et utf8 cartes à UTF-8. Essayez ce qui suit URL JDBC:
Avez-vous essayé:
Et aussi: Avez-vous essayer un simple client Java (application console) qui se connecte à la bd? L'UTF-8 dans ce cas?
Notez que si vous utilisez le Printemps de Démarrage, vous pouvez le faire à l'aide des propriétés au sein de
application.properties
au lieu d'avoir à ajouter des paramètres supplémentaires pour vos chaînes de connexion:De le mettre en application.propriétés:
J'ai eu le même problème pendant l'utilisation de Spring-boot + intégré H2 + Hibernate, mais le problème est au moment de la lecture de script SQL. (les données.sql) L'encodage dans la base de données a été brisé à chaque fois quand je le lis tout caractère étranger.
Ajoutant la ligne suivante à ma demande.propriétés résolu le problème:
spring.datasource.sqlScriptEncoding=UTF-8
Si il est possible d'aller à la console, et d'ajouter certaines données manuellement. Si l'étranger personnages apparaissent dans le droit chemin. Ensuite, cette solution peut bien fonctionner pour vous.
J'ai trouvé la solution ici:
http://ufasoli.blogspot.com/2014/07/spring-boot-jpa-broken-encoding-on.html
J'ai perdu le temps pour générer de l'utf-8 tables. Non de ci-dessus a fonctionné pour moi. Enfin, j'ai modifier mon fichier de configuration de mysql & il fonctionne comme un charme. Si vous êtes sous linux(je suis sous ubuntu, je suis sûr qu'il y est un fichier pour windows) ouvrez le fichier /etc/mysql/my.cnf et ajoutez le code suivant.
N'oubliez pas de redémarrer le service de mysql.