mysql可以在查询中解码吗?

Posted

技术标签:

【中文标题】mysql可以在查询中解码吗?【英文标题】:Can mysql decode inside the query? 【发布时间】: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."' 

【问题讨论】:

【参考方案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 插入数据库之前对其进行解码。如果它们现在是这样存储的,请将它们替换为规范化版本。

【讨论】:

以上是关于mysql可以在查询中解码吗?的主要内容,如果未能解决你的问题,请参考以下文章

mysql查询可以在哪里进行限制吗? [复制]

任何人都可以在 MySQL 中调整给定的查询吗

我可以有来自另一个表的查询变量吗? mysql

查询成本是 MySQL 查询优化的最佳指标吗?

你可以在没有模型的情况下在 Django 中运行原始 MySQL 查询吗?

在单个 MySQL 查询中,我可以从具有主键数组的字段返回字符串数组吗