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可以在查询中解码吗?的主要内容,如果未能解决你的问题,请参考以下文章