是否可以將MySQL AES_ENCRYPT存儲到LONGTEXT列中?mysql aes_encrypt到longtext列
我知道我是假設使用varbinary或blob,但我有一個表,我存儲了一堆隨機「設置」,並且settings_value列是longtext。
我去存儲一個「smtp郵件密碼」在那裏,並有一點卡住。
如果不是,我想我會通過php將它存儲爲十六進制字符串。
SOLUTION:
我的查詢是這樣的:
INSERT INTO table (setting_value)VALUES(AES_ENCRYPT('password', 'key')) ON DUPLICATE KEY UPDATE setting_value=VALUES(setting_value)
正如您將在下面我的意見看,我試圖從utf8_unicode_ci改變我的專欄編碼utf8_bin,仍然失敗了。我改成了latin1_bin,它工作。
我切換回utf8_unicode_ci和改變了我的查詢到以下幾點:
INSERT INTO table (setting_value)VALUES(HEX(AES_ENCRYPT('password', 'key'))) ON DUPLICATE KEY UPDATE setting_value=VALUES(setting_value)
,由於它只是把我的值轉換成十六進制字符串工作。
我花了第二弄清楚如何獲得值回了正常,所以對於文檔目的:
$pass = SELECT AES_DECRYPT(BINARY(UNHEX(setting_value)), 'key') as orig_text FROM table
echo $pass->orig_text
是的,我做了,我不斷收到錯誤:錯誤的字符串值:'\ xA9] \ x84 \ x19 \ x90 \ x19 ...'列'setting_value'。那麼,我會再試一次。我剛看過手冊,它說varbinary或blob。 – 2011-04-13 20:15:20
它在MySQL 5.5.8中爲我工作。我嘗試使用utf8和latin1的字符集,都工作。祝你好運! – 2011-04-13 20:19:44
嗯,將列類型從utf8_unicode_ci更改爲latin1_bin,並找到它。去搞清楚。雖然utf8_bin沒有工作。 – 2011-04-13 20:31:28