Url JDBC pour MySQL configuration utilise le codage de caractères utf8
MySQL 5.6 Configuration
J'ai configuré /etc/mysql/my.cnf
manuellement pour utiliser utf8
. Voir ci-dessous:
[mysqld]
character-set-server=utf8
character-sets-dir=/usr/share/mysql/charsets
[mysql]
character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8
[mysqladmin]
character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8
[mysqlcheck]
character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8
[mysqldump]
character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8
[mysqlimport]
character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8
[mysqlshow]
character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8
[client]
character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8
À partir de la console:
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
De configuration de l'Application
Maintenant pour l'application web, j'ai utilisé une de ces url de connexion dans de Tomcat context.xml
url="jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"
url="jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&characterSetResults=utf8&connectionCollation=utf8_general_ci"
Ci-dessus ne fonctionne pas et donne moi à la suite de l'application.
show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
Ce qui ne va pas ici? Pourquoi c'est montrer utf8mb4
au lieu utf8
?
OriginalL'auteur Kowser | 2013-08-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez avoir à faire avec les éléments suivants:
Les changements dans MySQL Connector/J 5.1.13 (2010-06-24)
Connector/J n'a pas de soutien utf8mb4 pour les serveurs 5.5.2 et les plus récents.
Connector/J maintenant auto-détecte les serveurs configurés avec character_set_server=utf8mb4 ou des friandises Java encodage utf-8 passé à l'aide de characterEncoding=... comme utf8mb4 dans le JEU de NOMS= appels lors de l'établissement de la connexion. (Bug #54175)
utf8mb4
est MySQLUTF-8
. Si vous utilisezutf8
de MySQL, vous êtes absent dehors sur une partie importante de l'Unicode (l'astral symboles). Commutateur de tout, tables de base de données, àutf8mb4
ou vous risquez de perdre des données. Ouais, je sais, le ridicule, non? Ils doivent avoir confondu la journée, ils ont codé ce dans pour une nuit.Pourtant, il semble comme il aurait dû
character_set_connection
à utf8mb4, commeSET NAMES
.MySQL à l'origine utilisé 3 octets pour coder
utf8
... ce qui est faux. UTF8 utilise jusqu'à un maximum de 4 octets. Mais devant rester compatible avec leurs vieux bugs, ils sorta fixé par l'introduction deutf8mb4
, qui est la même codant pour le reste du monde l'appelle UTF8. Donc, l'utilisation utf8mb4 si vous voulez le support complet unicode. La mauvaise chose est que peu de gens le savent, donc de nouveaux systèmes reçois créé en utilisant le mauvais encodage.OriginalL'auteur wchiquito