is_utf8:0,
Rechercher : dans
Par :

[MySQL] Différence entre varchar nvarchar

Dernière réponse le 3 jun 2009 à 14:28:58 Dumbo, le 3 jun 2009 à 11:56:03 
 Signaler ce message aux modérateurs

Bonjour tout le monde,

J'ai fait quelques recherches et j'ai vu que la différence entre ces deux types de données était leur jeu de caractères. Varchar est un type de données NON UNICODE contrairement à nvarchar qui est UNICODE.
De plus, avec le type de données nvarchar, un caractère est stocké sur 2 octets (1 octet pour varchar).

Donc au final, nvarchar pourra stocker 2 fois moins de caractères que varchar.

Ai-je bien tout compris ? Ou j'ai oublié quelques détails important ?

Meilleures réponses pour « [MySQL] Différence entre varchar nvarchar » dans :
Installation rapide de LAMP (Apache+MySql+php) sous Linux VoirLAMP = Linux+Apache+MySql+Php. C'est le serveur web par excellence. L'ensemble est facile à installer. Installation rapide sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 Le mot de passe administrateur mySQL...
Réinitialiser le mot de passe root de MySQL VoirQue ce soit lors de la première installation ou après la perte du mot de passe principal de MySQL, il est nécessaire de pouvoir modifier le mot de passe administrateur (root) de MySQL. Vous avez perdu le mot de passe root de MySQL ? Pour pouvoir...
MySQL – Optimisation VoirL’optimisation au niveau de MySQL passe par trois composants, à savoir : Optimisation du serveur MySQL Optimisation de la base de données Optimisation des requêtes Optimisation de la configuration de serveur MySQL L’optimisation du serveur peut...
Importer et exporter des données sous MySQL VoirImportation et exportation Les Système de Gestion de Bases de Données tels que MySQL permettent de manipuler facilement et avec beaucoup de souplesse un très important volume de données. Toutefois, aussi robuste soit MySQL, il peut être intéressant...
MySQL - Installation sous Windows VoirPrésentation de MySQL MySQL est un Système de Gestion de Bases de Données (SGBD) fonctionnant sous Linux et Windows. Depuis la version 3.23.19, MySQL est sous Licence GPL (aussi bien sous Linux que Windows), ce qui signifie qu'il peut être utilisé...
Administration de MySQL VoirLa base de données mysql Les Système de Gestion de Bases de Données tels que MySQL permettent de manipuler facilement et avec beaucoup de souplesse un très important volume de données. Toutefois, aussi robuste soit MySQL, il peut être intéressant...

1

Alternate, le 3 jun 2009 à 12:04:42

C'est a peu prêt cela. mais pour palier au problème du nombre de caractères, on peut toujours augmenter la taille du varchar ou du nvarchar pour qu'ils acceptent autant de caractère que tu le souhaites.

exemple : ici on choisit le nombre de caractères,

CREATE TABLE `exemple` (
  `id` VARCHAR( 10 ) NOT NULL ,
  `plop` VARCHAR( 255 ) NOT NULL ,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Répondre à Alternate

2

Dumbo, le 3 jun 2009 à 12:08:36

Bah varchar pourra aller au maximum à 8000 tant dit que nvarchar à 4000 non ?

"C'est a peu prêt cela."
C'est à dire qu'il manque certains détails non ? lol

En fait je demande ça car je dois changer un type de données varchar en nvarchar et je voudrai savoir si cela peut avoir des conséquences ou pas.

Répondre à Dumbo

3

Alternate, le 3 jun 2009 à 12:17:12

J'utilise régulièrement mySQL et j'ai vu que quelques fois lorsque qu'il y avait un champ varchar(50) et que, par le biais d'une application web (ou autre), on y introduisait un texte de 100 ou 200 caractères ... ça fonctionnait.
j'avais fait des recherches et j'avais trouvé que les tailles déclarées à la création n'était là que pour l'indexation de la table. en fait MySQL réserve la taille précisée à la création mais s'il a besoin de plus il prend plus.

(j'espère que si tu as des booléen à utiliser, tu ne regarderas pas trop en détail le fonctionnement car là aussi ça semble compliqué)

Répondre à Alternate

4

dam75, le 3 jun 2009 à 12:59:26

Bonjour,

Alternate : ca n'est pas tout à fait cela, en fait, par défaut, MySQL accepte une entrée de 200 caractères dans un VARCHAR(50) MAIS il la tronque à 50 caractères ...
C'est donc dangereux, parce que on croit que tout s'est bien passé (il n'y a ni erreur ni warning), MAIS on a perdu 150 caractères :)
Cela peut se configurer dans le my.cnf (strict sql mode), mais c'est très rarement en place ...
Voir la documentation : http://dev.mysql.com/doc/refman/5.1/en/char.html

Dumbo : NVARCHAR n'existe pas en tant que type de données dans MySQL ... par contre, cela existe sur SQL Server ... confusion ? :)
Du coup, elle peut exister également dans certaines couches d'abstraction (JDBC, ...) : MySQL l'assimilera alors aux VARCHAR.

Bon courage

Répondre à dam75

5

Dumbo, le 3 jun 2009 à 13:27:00

Oui j'ai me suis trompé dans mon explication :)

En fait, mon soucis, c'est que lorsque je migre ma base SQL Server vers MySQL par l'intermédiaire de l'outil MySQL Migration Toolkit, les données en nvarchar contenant des accents ont bien migré mais celles en varchar (avec des accents) posent un problème. Donc la solution que j'ai trouvé, changer le type de données varchar en nvarchar ...

C'est pour cela qu'avant je souhaite vérifier si cela ne peut entraîner aucune erreur.

Répondre à Dumbo

6

dam75, le 3 jun 2009 à 13:57:23

Oki je comprends mieux :)

je n'utilise pas le MTK, mais essaie de mettre ta colonne VARCHAR en UTF8 pour voir si ca passe mieux ?

Répondre à dam75

7

Dumbo, le 3 jun 2009 à 14:17:06

Ma colonne coté SQL Server ou MySQL ?

Répondre à Dumbo

8

dam75, le 3 jun 2009 à 14:25:48

Je pensais à MySQL afin qu'il accepte les caracteres sur 2 octets en import, mais dans l'idéal la faire sur les 2 ne doit pas être mal ...
Ceci étant si la conversion de nvarchar en varchar fonctionne, tu peux aussi continuer comme tu as fait ...

Bon courage

Répondre à dam75

9

 Dumbo, le 3 jun 2009 à 14:28:58

C'est plutôt la conversion de varchar en nvarchar qui marcherait.

J'ai essayé de mettre ma base en UTF-8 pour MySQL mais cela ne réglé pas le problème malheureusement.

Répondre à Dumbo