weed a écrit :
euh, je ne pense pas qu'il faille pour autant trimer à chaque fois un char
|
Si tu attends un nom de personne, alors si :
Code :
SELECT * FROM gens WHERE nom = 'MagicBuzz'
|
Retournera jamais rien si "nom" n'est pas un char(9)"
il faudra à la place utiliser (si nom = char(12))
Code :
SELECT * FROM gens WHERE nom = rpad('MagicBuzz', 12)
|
ou
Code :
SELECT * FROM gens WHERE rtrim(nom) = 'MagicBuzz'
|
ou
Code :
SELECT * FROM gens WHERE nom LIKE 'MagicBuzz%'
|
(avec un résultat aléatoirement faut)
et surtout, la troncature est faite implicitement :
isocode = char(2)
Code :
SELECT * FROM pays WHERE isocode = 'FRA'
|
Code :
SELECT * FROM pays WHERE isocode = 'FRI'
|
=> Les deux requêtes retournent la ligne "FR" sans le moindre warning. alors qu'avec un varchar(2) aucune n'aurait retourné de valeur
idem pour l'insertion : inserrer une valeur trop grande dans un char tronque la valeur sans crier gare. avec un varchar tu te tapes une erreur (cf norme SQL)
Message édité par MagicBuzz le 16-06-2008 à 10:21:47