我有一个 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 记录。
有任何想法吗?