Existe-t-il des solutions pour maintenir un champ VARCHAR(65535)
unique par ID
dans MySQL?Champ VARCHAR (65535) unique par <ID> dans MySQL
Répondre
Je voudrais utiliser une fonction de hachage sur la valeur du champ et le stocker dans un champ unique distinct sur la même table.
donc votre table serait quelque chose comme ceci:
create table my_table (
id integer not null primary key,
text_content varchar(65535) not null,
text_hash varchar(128) not null unique
);
Lors de l'insertion sur cette table, vous calculer SHA256 hachage pour le champ text_content
et le stocker dans text_hash
champ. De cette façon, vous pouvez être sûr que les valeurs text_content
sont uniques sur votre table.
Si vous aimez la programmation DB SIDE, vous pouvez mettre cette logique sur un déclencheur fourni MySQL les prend en charge.
comment gérer les collisions? – Nick
Les collisions seraient ** extrêmement ** rares. Ne pensez pas que vous les trouverez. C'est pour cela que ces algorithmes ont été conçus. Vérifiez cette question: http://stackoverflow.com/questions/4014090/is-it-safe-to-ignore-the-possibility-of-sha-collisions-in-practice –
Cela aurait pu être résolu 100% à l'épreuve des balles avec une comparaison binaire dans le cas d'une collision de hachage + un champ secondaire auto-incrémenté pour l'unicité de la clé en cas de collision. N'y a-t-il aucune solution de base de données qui exécuterait une telle tâche? – Nick
* unique par ID * - qu'est-ce que cela signifie? –
L'ID est l'entité clé primaire. – Nick