可以在查询里面解码mysql吗?

时间:2016-05-24 16:27:45

标签: php mysql mime

我有一个数据库,其中包含来自imap服务器的所有电子邮件的副本。

所以我有一个列名称是发件人的地址,有时像这样:

=?utf-8?B?UmVwb3J0Z

和其他没有编码的人,以及其他编码

的人
=?iso-8859-1?Q?SALUDO_Y_CO

我认为这是电子邮件的mime编码。

如何使用已解码的值搜索该列?实施例

  SELECT * FROM tablename WHERE decoded_column(columnname) REGEXP '".$text_to_search."' 

2 个答案:

答案 0 :(得分:1)

那是quoted printable,MySQL没有内置的解码方式。你需要在外部做到这一点。我建议在将它们作为UTF-8插入数据库之前解码它们。如果它们现在存储起来,请用标准化版本替换它们。

答案 1 :(得分:1)

正如@tadman已经提到的,没有内置的方法可以做到这一点。

您可以尝试使用以下解决方案。创建一个稍后将在WHERE子句中使用的存储函数。

CREATE FUNCTION quoted_printable(input VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
    // Here the code for decoding your input
END

然后在您的查询中:

SELECT * FROM tablename WHERE quoted_printable(columnname) REGEXP '".$text_to_search."'

请记住,存储的函数比程序有更多的限制,因此您可能需要从函数调用一个过程来获得所需的函数。

话虽如此,我仍然建议以清理方式存储数据 - 正如@tadman所说,在存储之前将它们转换为UTF-8。 我上面提出的解决方案应该被视为一个丑陋的解决方案,而不是一个可行的解决方案。