2016-08-20 33 views

回答

1

我會對字段的值使用散列函數,並將其存儲在同一張表的單獨唯一字段中。

所以,你的表是這樣的:

create table my_table (
    id integer not null primary key, 
    text_content varchar(65535) not null, 
    text_hash varchar(128) not null unique 
); 

當上表中插入,你將計算SHA256哈希text_content領域並將其存儲在text_hash領域。這樣你可以很肯定text_content值在你的桌子上是唯一的。

如果你喜歡DB SIDE編程,你可以把這個邏輯放在提供的觸發器上。MySQL支持它們。

+0

我該如何處理碰撞? – Nick

+0

碰撞將非常罕見。不要以爲你會找到他們。這就是那些算法的設計目的。檢查這個問題:http://stackoverflow.com/questions/4014090/is-it-safe-to-ignore-the-possibility-of-sha-collisions-in-ractices –

+0

這可能已經解決100%防彈在散列衝突情況下的二進制比較+在碰撞情況下爲密鑰唯一性的自動增量輔助字段。沒有任何數據庫解決方案可以執行這樣的任務嗎? – Nick