mysql 可以在查询中解码吗?
Can mysql decode inside the query?
我有一个数据库,其中包含来自 imap 服务器的所有电子邮件的副本。
所以我有一个列名是发件人的地址,有时是这样的:
=?utf-8?B?UmVwb3J0Z
其他不编码,其他编码
=?iso-8859-1?Q?SALUDO_Y_CO
我认为这是电子邮件的 mime 编码。
如何使用已解码的值搜索该列?例子
SELECT * FROM tablename WHERE decoded_column(columnname) REGEXP '".$text_to_search."'
那是 quoted printable 而 MySQL 没有内置的解码方式。您需要在外部进行。我建议在将它们作为 UTF-8 插入数据库之前对其进行解码。如果它们现在是这样存储的,请将它们替换为规范化版本。
正如@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。
我在上面提出的解决方案应该被视为一个丑陋的解决方法,而不是一个可行的解决方案。
我有一个数据库,其中包含来自 imap 服务器的所有电子邮件的副本。
所以我有一个列名是发件人的地址,有时是这样的:
=?utf-8?B?UmVwb3J0Z
其他不编码,其他编码
=?iso-8859-1?Q?SALUDO_Y_CO
我认为这是电子邮件的 mime 编码。
如何使用已解码的值搜索该列?例子
SELECT * FROM tablename WHERE decoded_column(columnname) REGEXP '".$text_to_search."'
那是 quoted printable 而 MySQL 没有内置的解码方式。您需要在外部进行。我建议在将它们作为 UTF-8 插入数据库之前对其进行解码。如果它们现在是这样存储的,请将它们替换为规范化版本。
正如@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。 我在上面提出的解决方案应该被视为一个丑陋的解决方法,而不是一个可行的解决方案。