4 votes

Le serveur Mysql ne prend pas en charge les caractères utf8 encodés sur 4 octets.

J'ai reçu une erreur de serveur en exécutant un composant de transfert de données de Sql Server à MySql db. Le message d'erreur est le suivant :

[MySql][ODBC 5.1 Driver][mysqld-5.0.67-community-nt-log]Server does not support 4-byte encoded UTF8 characters.

La table Sql Server source contient des colonnes nvarchar, la table MySql cible contient des colonnes varchar.

Quelqu'un peut-il m'éclairer sur ce problème ?

7voto

prosfilaes Points 692

Si vous avez besoin que MySQL prenne en charge les caractères UTF-8 sur 4 octets (ce qui est normalement considéré comme faisant partie de l'UTF-8), vous devez utiliser le jeu de caractères utf8mb4, et non utf8. utf8mb4 a été pris en charge pour la première fois dans MySQL 5.5.3.

2voto

dbscissors Points 21

J'ai eu le même problème que j'ai pu reproduire en mettant simplement à jour une char(1) pour une seule ligne sur un serveur lié sur SQL 2008 vers une BD MySQL 5.1 :

update linked_server_name...table_name set status = 'c' where id = 1;

Cette erreur se produisait sur un serveur nouvellement construit. J'avais une configuration similaire sur une autre machine, où le même code fonctionnait parfaitement. La seule différence était la version du pilote ODBC MySQL : sur le nouveau serveur, il s'agissait de la version 5.2.2 ; sur l'ancien serveur (qui fonctionne), il s'agit de la version 5.1.8 (désormais non prise en charge).

J'ai téléchargé et installé la version précédente du pilote ODBC (v5.1.11), et le problème a disparu.

1voto

Chris Jester-Young Points 102876

Les "caractères UTF-8 codés sur 4 octets" sont des caractères dont le point de code est le suivant > 0xFFFF c'est-à-dire ceux dont les points de code ne tiennent pas dans les 16 bits (sont en dehors de l'intervalle de confiance). plan multilingue de base (BMP)). De nombreux systèmes plus anciens ne supportent pas les caractères en dehors du BMP.

Les caractères en dehors du BMP sont généralement des caractères CJK ; je ne sais pas si c'est le cas pour vous ici :-)

1voto

wallyk Points 33150

De la documentation :

Actuellement, le support MySQL pour UTF-8 ne comprend pas les séquences de quatre octets. (Une norme plus ancienne pour l'encodage UTF-8 est donnée par la RFC 2279, qui décrit des séquences UTF-8 qui prennent de un à six octets. La RFC 3629 rend la RFC 2279 obsolète ; pour cette raison, les séquences séquences de cinq et six octets ne sont plus utilisées).

1voto

shootsoft Points 11
  1. Mettez à jour votre MySQL à 5.5.3 et utilisez utf8mb4 pour l'encodage des colonnes.

  2. Forcer la copie

  3. Créez une nouvelle table dans SQLServer avec la même structure que la table que vous devez copier.

  4. Changez la colonne de la nouvelle table nvarchar(size) -> varchar(size x 2)

  5. Copiez les données dans la nouvelle table

  6. Copier les données du SQLServer de la nouvelle table vers MySQL

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X