web-dev-qa-db-fra.com

Différence entre les pilotes ANSI et Unicode de MySQL

En choisissant la source de données sous ODBC (64 bits) sous Windows, j'obtiens deux options disponibles de la base de données MySQL:

  • MySQL ODBC 5.3 Pilote ANSI
  • MySQL ODBC 5.3 Pilote Unicode

Quelle est la différence entre ces deux?

29
Malwinder Singh

Tout d'abord, je dois dire que je n'utilise pas MySQL, mais je connais les pilotes ODBC. Dans ODBC, il existe différentes API pour unicode et ansi. L'ansi Les API se terminent par A et les API unicode se terminent par W (par exemple, SQLPrepareA et SQLPrepareW). Les API ansi acceptent les octets/octets pour les chaînes de caractères et ne peuvent donc gérer que les heures 0 à 255. Les API unicode acceptent les SQLWCHAR qui sont des UCS à 2 octets. 2 points de code unicode codés (les versions plus récentes de MS SQL Server peuvent gérer les chaînes codées UTF16) et peuvent donc gérer approximativement les 65 000 premiers points de code en unicode.

Donc, si vous devez stocker des données Unicode, vous n'avez pas le choix du pilote à utiliser.

Je ne laisserais pas les commentaires sur la vitesse de Carnangel vous décourager d'utiliser le pilote unicode et en tout cas ses commentaires ne contiennent aucun fait. Il peut faire référence à:

Si vous stockez des données Unicode dans MySQL, elles seront encodées en UTF-8 et transférées sur votre réseau en UTF-8. Du côté client, le pilote ODBC devra convertir les données encodées UTF-8 en UCS-2 car c'est ce dont a besoin ODBC. Évidemment, l'inverse s'applique .

Si vous écrivez une application ANSI ODBC (c'est-à-dire qui utilise les ansi ODBC apis) avec un pilote unicode ODBC alors le gestionnaire de pilotes ODBC devra convertir l'UCS-2 que le pilote retourne en 8 bits (avec perte) et convertir les données 8 bits que vous transmettez au pilote en UCS-2. t faire ça.

Ces jours-ci, je serais surpris si quelqu'un utilise toujours les pilotes ANSI ODBC.

20
bohica

Comme vous le savez peut-être, Ansi et unicode sont appliqués au type de caractère de données. Vous pouvez choisir l'un ou l'autre, ce n'est pas une question de processeur Voici la différence entre eux: - Unicode vous permet d'avoir toutes les propriétés des caractères activées mais en réduisant le traitement de la vitesse brute - Ansi, l'inverse, moins de type de caractère mais vitesse brute le traitement accélérera

Si vous êtes un nouvel utilisateur, prenez celui Unicode, sinon vous pouvez choisir celui Ansi.

J'espère que vous avez compris;)

4
Carnangel