我有一个 MySQL 表,其中文本字段使用 AES_ENCRYPT 存储为 BLOB。我需要将几个关键字与行匹配,条件是所有关键字必须存在于一行中才能返回。虽然在非加密字段上使用 MATCH/AGAINST 效果很好,但我的设置并不走运。
我的“人”表:
+============+===========+
| name_first | name_last |
+============+===========+
| John | Smith |
+------------+-----------+
| Jane | Smith |
+============+===========+
例如,当搜索“John”和“Smith”时,应该只返回实际包含这两个关键字的行。不应匹配名字为“Jane”和姓氏为“Smith”的行。
唯一似乎有效的选择是在使用 LIKE 时:
SELECT
AES_DECRYPT(name_first,"MyKey"),
AES_DECRYPT(name_last,"MyKey")
FROM people
WHERE (LOWER(CONVERT(AES_DECRYPT(name_first,"MyKey") USING latin1)) LIKE "%john%"
OR LOWER(CONVERT(AES_DECRYPT(name_last,"MyKey") USING latin1)) LIKE "%john%"
OR LOWER(CONVERT(AES_DECRYPT(name_first,"MyKey") USING latin1)) LIKE "%smith%"
OR LOWER(CONVERT(AES_DECRYPT(name_last,"MyKey") USING latin1)) LIKE "%smith%")
但是,我的 SELECT 返回了 John 和 Jane 的记录。
有什么想法吗?
最佳答案
你有没有试过这样的事情:
SELECT
AES_DECRYPT(name_first,"MyKey"),
AES_DECRYPT(name_last,"MyKey")
FROM people
WHERE (LOWER(CONVERT(AES_DECRYPT(name_first,"MyKey") USING latin1)) LIKE "%john%"
AND LOWER(CONVERT(AES_DECRYPT(name_last,"MyKey") USING latin1)) LIKE "%smith%")
关于mysql - 使用 MySQL 中的加密 blob 字段匹配一行中的所有关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15970029/