是否可以将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