2014-04-26 73 views
0

返回的項目我添加了一個項目有以下SQL語句:MySQL的失敗與AES_ENCRYPT函數

INSERT INTO `db`.`users` (`name`, `pass`) VALUES ('Terry', AES_ENCRYPT('32145', '32145')) 

然後將新行添加到表中,可以肯定的。

當我試圖用'name'和'pass'找到這個項目時,返回了一個空集。查詢語句如下:

SELECT * FROM `users` WHERE `name` ='Terry' AND `pass`= AES_ENCRYPT('32145', '32145') 

函數AES_ENCRYPT有什麼問題嗎? :-(

更新在2014年4月27日:

類型「通行證」被定義爲varchar(255),其原來是一個災難的:-(

後我修改其類型爲varbinary(255),一切工作。

原來的問題已經解決,但是,爲什麼鍵入varchar(255)無法在這種情況呢?

回答

0

請參閱fiddle和aes_encrypt documentation

什麼類型是您的pass列?在撥弄我定義它想:

pass varbinary(200) 

成功這篇插入:

INSERT INTO users (name, pass) VALUES ('Terry', aes_encrypt('32145', '32145')) 

然後問,它是這樣的:

select * 
from users 
where name = 'Terry' and pass = aes_encrypt('32145', '32145'); 

select *, aes_decrypt(pass, '32145') 
from users 
where pass = aes_encrypt('32145', '32145'); 

所以您的查詢應該有工作。

+0

我將'pass'的類型定義爲'varchar(255)',導致失敗。在我將其類型修改爲'varbinary(255)'後,一切工作正常。插入和查詢都是正確的。 –

0
SELECT * FROM users WHERE name ='Terry' AND pass= AES_DECRYPT('32145', '32145') 

MySQL Reference