在执行WHERE语句之前对MySQL列进行base64解码

20

基本上 - 这是一个很长的故事 - 但我在数据库中有一个以base64字符串编码的字段。

例如:这个存储在数据库中:

YToyOntzOjIwOiJUeXBlX29mX29yZ2FuaXNhdGlvbiI7czoyMDoiTWVtYmVyIG9mIFBhcmxpYW1lbnQiO3M6ODoiUG9zdGNvZGUiO3M6NzoiUEUxIDFKQSI7fQ==

等同于这个:

a:2:{s:20:"Type_of_organisation";s:20:"Member of Parliament";s:8:"Postcode";s:7:"#postcode#";}

我想要做的是选择这个字符串 LIKE '%Member of Parliament%'。有没有一种方法在执行 WHERE 前对一个 MySQL 列进行 base64 解码?

例如:SELECT * FROM table WHERE base64_decode(column) LIKE '%Member of Parliament%'

谢谢。


你使用的MYSQL版本是什么? 也许你可以为此编写一个UDF? - jahsen
1
可能会没有答案。另外我想要解码,而不是编码。 - Thomas Clayson
Mysql 5.0.5 - 什么是UDF?我在网上找到了一个存储过程,但显然效率极低。 - Thomas Clayson
用户定义函数 - user1158559
1个回答

39
如果您使用的是MySQL 5.6.1或更高版本,可以使用FROM_BASE64()函数:
该函数接受一个字符串,该字符串采用TO_BASE64()使用的base-64编码规则进行编码,并将解码后的结果作为二进制字符串返回。如果参数为NULL或不是有效的base-64字符串,则结果为NULL。有关编码和解码规则的详细信息,请参见TO_BASE64()的描述。
此函数添加于MySQL 5.6.1中。 例如: mysql> SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc')); -> 'JWJj', 'abc' 否则,您可以使用来自以下网址的用户定义函数:https://github.com/y-ken/mysql-udf-base64

MySQL 5.1 中有相应的函数吗? - Randell
我不知道,你需要使用base64.sql定义自己的函数。 - Boy Baukema
Wi-Fi连接的链接已经失效。 - n0nag0n
谢谢@ImmortalFirefly,我找到了另一个链接。如果这个链接对你有用,请告诉我。 - Boy Baukema

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接