14 votes

Stockage des valeurs hexadécimales en tant que valeurs binaires dans MySQL

Je pensais à la façon dont je stocke les mots de passe dans ma base de données : des chaînes SHA1 salées de façon appropriée dans un champ CHAR(40). Cependant, étant donné que les données de caractère dans ce champ ne sont en fait qu'une représentation hexadécimale d'un nombre de 160 bits, j'ai pensé qu'il serait préférable de les stocker en tant que BINARY(20).

CREATE TABLE users (
    password BINARY(20)
    /* snip */
);

INSERT INTO users (password) VALUES (UNHEX(SHA1('mypassword'));

De mon point de vue, l'un des avantages de cette approche est qu'elle réduit de moitié la taille de ce champ, mais j'imagine qu'il y a probablement aussi des inconvénients.

Quel est votre avis ?

1voto

benzado Points 36367

Il s'agit d'une vieille question, mais j'ai remarqué que personne ne l'a mentionnée. validation des données comme un avantage par rapport à une colonne BINAIRE. En particulier, il est possible de stocker une valeur non valide dans une colonne CHAR(40) en utilisant des caractères qui ne sont pas des chiffres hexadécimaux (0-9, a-f).

Vous pouvez toujours insérer une valeur erronée dans la colonne BINARY (par exemple, si vous oubliez d'appeler UNHEX), mais vous n'aurez jamais à envisager de lire une valeur de la base de données qui n'est pas correctement analysée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X