【问题标题】:Can mysql decode inside the query?mysql可以在查询中解码吗?
【发布时间】:2016-09-21 23:51:39
【问题描述】:

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

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

=?utf-8?B?UmVwb3J0Z

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

=?iso-8859-1?Q?SALUDO_Y_CO

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

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

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

【问题讨论】:

    标签: php mysql mime


    【解决方案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。 我上面提出的解决方案应该被视为一个丑陋的解决方法,而不是一个可行的解决方案。

    【讨论】:

      【解决方案2】:

      那是quoted printable,而 MySQL 没有内置的解码方法。你需要在外部进行。我建议在将它们作为 UTF-8 插入数据库之前对其进行解码。如果它们现在是这样存储的,请将它们替换为规范化版本。

      【讨论】:

        猜你喜欢
        • 2017-05-23
        • 1970-01-01
        • 2010-10-03
        • 2021-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多