我很努力地在MySQL中創建一個觸發器,這樣每次我將一個值插入名爲title
的列中時,都應該創建一個HASH並將其存儲在列title_hash
中。因爲我不知道這是如何工作,我發現這個代碼,而谷歌搜索:如何告訴MySQL在Update/Insert之前觸發一個Hash?
CREATE TRIGGER insertModelHash
BEFORE
INSERT
ON
products
FOR EACH ROW SET
NEW.model_hash = CONV(RIGHT(MD5(NEW.products_model), 16), 16, 10)
MySQL的基準告訴我,這意味着:
- 創建一個名爲
insertModelHash
觸發... - ...在插入行int表之前
products
... - 在我打算插入的每一個新行中,對列
products_model
使用函數MD5, RIGHT, CONV
。
的3點需要更多的解釋:
- 我猜,這
NEW
是某種新行標識符。因此NEW.products_model
指向當前(新)行中的列products_model
。 - Then
MD5
is issued。由於我想使用SHA-2,因此我很明顯要更改MD5(NEW.products_model), 16)
===>SHA2(NEW.products_model), 224)
。 - 現在我奮鬥了:爲什麼這個傢伙使用
CONV(RIGHT(...)...)
?這真的有必要嗎?
其他信息:現在,我做
hashlib.sha224(title).hexdigest()
在Python
並存儲該值。
我很感激任何建議/解釋!
可以肯定的是:如果我在'NEW.title'上調用'SHA2',我會得到與我在Python中使用'hashlib.sha224(title).hexdigest()'相同的結果嗎? – Aufwind
這裏的第幾段http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html說說返回值。簡短的答案是合格的。需要注意的是,根據您使用的mysql版本,返回值可能是二進制字符串或字符串。無論哪種方式,我不認爲除了將其存儲在varchar字段中之外,您還需要做其他事情,並且它將被轉換,但是我會對兩個源之間的已知值進行測試,以確保它們可用。 –
謝謝@Doug! – Aufwind