English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
Toutes les catégories

Bonjour a tous,

Dans le cadre d'un projet sur lequel je bosse avec un ami, et qui intérréssera je pense (je l'espére) nos chers amis webmaster
nous avons quelques intérrogations concernant l'optimisation de MySQL.

- Dans une des tables MySQL, il nous faudra stocker le titre des sites
et leur URL. Je voudrais savoir quel serait le meilleur type pour les
deux : TEXT ou VARCHAR, d'un point de vue d'optimisation (rapidité et
occupation dans le disque). Est-ce que VARCHAR pourrait prendre plus
de place que TEXT dans le disque, car il n'est pas variable ? Est-ce
que TEXT est plus lent/rapide que VARCHAR lors des comparaisons ?
VARCHAR serait mieux pour les URL et TEXT mieux pour les titre ?

- Côté interclassement, que choisir ? Pour le Titre, j'ai choisi
l'UTF-8, car cela pourrait être intéressant pour les sites asiatiques
(entre autres). Pour les URL, un "ascii_general_ci" suffirait ? Il
faudrait passer en latin1 ?

2006-12-22 05:39:35 · 4 réponses · demandé par Benm 1 dans Informatique et internet Programmation

- Je cherche un moyen simple de convertir le titre des sites en UTF-8.
Suis-je obligé de lire l'encodage du site en me basant sur ce qu'il y
a dans les ? Y-a-t-il un moyen plus simple, qui me permettrait
de détecter automatiquement l'encodage, puis de convertir le tout en
UTF-8 (c'est toujours permis de rêver ^_^ après tout, pourquoi pas ?).

2006-12-22 06:37:56 · update #1

4 réponses

Pourquoi se casser la tete avec MySQL alors que SQL Server Express est bien meilleur, mieux documente et gratuit.

Avec SQL Server t'as pas de limite sur la longueur des varchars.

2006-12-22 05:50:19 · answer #1 · answered by sdnthr 4 · 0 0

C'est une bonne question car la représentation physique des données est très différente. Il faut comprendre que le SGDB stocke les données sous forme de "pages", et que ces "pages" contiennent des "lignes" (vos enregistrements), et qu'il est bien important que ces lignes soient de taille fixe (c'est-à-dire qu'il y ait toujours le même nombres d'octets d'écart d'une ligne à l'autre), c'est absolument nécessaire car sinon il est impossible d'effectuer rapidement recherches et tris.

Les données VARCHAR sont écrites directement dans la ligne avec les autres colonnes. Ce qui signifie qu'un VARCHAR(255) occupe systématiquement 255 octets sur le disque, que votre colonne contienne une donnée ou non ! C'est adapté aux colonnes de taille réduite (moins d'un Ko).

Une donnée TEXT est stockée différemment : votre enregistrement contient en fait un pointeur (généralement sur 16 octets) qui pointe vers une autre zone du SGDB où l'espace est beaucoup plus moins "carré" et permet de stocker de larges zones de texte (parfois jusqu'à 2 gigas !).

Les données texte ne sont pas indexables directement et les opérations de recherche et de tri sont bien plus lentes !

D'après le W3C, et à moins que ça ait changé depuis, les URLs sont limitées à 1024 caractères. Ce qui ne signifie pas que les navigateurs supportent au-delà et que les sites ne font pas des URLs trop longues de temps à autre.

Personnellement j'utiliserai un VARCHAR(1023).

Pour le classement, la question est aussi pertinente puisque les URLs sont maintenant ouvertes aux alphabets non-latins (ça va être pratique de taper une URL en chinois ou avec des accents quand votre clavier ne permet pas de composer ces caractères directement !).
Mais je pense que vous confondez le classement et le codage des caractères !
Le classement, c'est un choix d'algorithme de tri (faut-il distinguer les majuscules ? les accents ? etc).
Le codage, c'est de savoir sur combien de bits on code un caractère et comment.

Il existe à cette fin le type VARCHAR et le type NVARCHAR, où NVARCHAR code un caractère sur deux octets (soit un jeu de 65535 caractères théoriques). Pour les URL, VARCHAR suffit. Pour les titres, je pense que l'utf-8 en VARCHAR est un bon compromis (si vous stockez en NVARCHAR, c'est de l'utf-16 !).

2006-12-24 19:51:39 · answer #2 · answered by bigjim 6 · 0 0

- le type VARCHAR est préféré à TEXT pour le stockage des URLs et les titres des sites à raison de ne pas dépasser les 253 caractères et il est aussi plus rapide.
- pour l'encodage l'UTF-8 est un choix rèussi puisqu'il est universal.
Bonne chance.

2006-12-22 06:55:49 · answer #3 · answered by hammadi 3 · 0 0

Bien sûr que SQL est un bon choix et facile d'utilisation via PHP par exemple, pour les URL en general un VARCHAR(255) est amplement suffisant c'est ce que j'utilise, le type TEXT est trop gros et inutile ici, pas de soucis avec la place disque elle sera optimisée de toute facon, ce type est aussi bien adapté à la pupart des titres si on ne dépasse pas 255 caractères.
Le type "TEXT" peut contenir 65535 caractères.
Le choix du type en UTF-8 est intéressant car universel, mais il faut aussi tout faire en UTF-8 et déclarer le site comme donnant du texte de ce type dans le champ

regarde cette page par exemple. le plus important est à mon avis d'essayer de respecter les normes et obtenir la valifation des pages, voir le site de normalisation : http://validator.w3.org/ pour le test de validation des pages. Il donne des indications précises sur la facon d'écrire du HTML.

2006-12-22 06:24:00 · answer #4 · answered by jfp 4 · 0 0

fedest.com, questions and answers