D'abord, je te dirais de ne pas trop être obséder par la taille des champs. La plus part du temps, un varchar/text suffit. En fonction de ton sgbdr tu auras au moins 3 variantes de type texte:
- char(n) : champ d'exactement n caractère, qui a mettre du bourage avec des espaces (ou autre). C'est bien pour un code produit à n caractères exactement
- varchar(n) : champ pouvant aller jusqu'à n caractères. pas de bourrage. c'est bien si tu as un champ dont la taille maximale est bornée
- text : champ illimité
Sachant que beaucoup de sgbd implémentent en fait varchar et text de la même manière, varchar étant juste un text avec une contrainte de taille.
La vraie question c'est donc souvant: la taille de mon champ est elle fixe ou pas. C'est pas la peine de faire un char(10) pour ensuite y insérer par exemple 'taz' qui sera converti en 'taz ' et ensuite récupérer ce champ et faire un monChamp.stripSpaces(). une IP n'a pas une taille fixe, un MAC si. (d'ailleurs certains SGBDR ont des types spéciaux pour ces adresses).
Si t'es pas très sur sur les contraintes de taille (varchar ou text), prends un type text illimité, ça ne coutera probablement pas plus d'espace disque. évite les limitations à la noix.
ton code société, bah si c'est du "NI XXXXXXX" et bien magique, c'est en fait un 'int' ... plus besoin de champ texte.