【问题标题】:MySQL NO CASE SENSITIVE Search Data for Keywords Using LIKE but Data is in Hexadecimal format (Not Text Format)MySQL NO CASE SENSITIVE Search Data for Keywords using LIKE but Data is in Hexadecimal format (Not Text Format)
【发布时间】:2015-10-23 13:54:04
【问题描述】:

我有一个数据库,其中相关列中的所有数据都是十六进制格式,比如单词 ABSENT 我们有十六进制格式的数据 414453454e54

我想对包含特定文本的记录进行搜索,该记录也是十六进制格式(SELECT.....LIKE '%414453454e54%'

我如何以不区分大小写的方式搜索此类关键字“414453454e54”的记录。意思是搜索 414453454e54(即 ABSENT)应返回所有包含 ABSENT 的记录,在任何情况下(ABSENT、absent)或混合大小写(Absent ,abseNt) 为十六进制格式。

我已尝试使用 UPPER ()、LOWER () 以及网上提供的许多此类选项,但似乎没有一个可用,因为它是十六进制格式。

等待快速解决

【问题讨论】:

  • 简单的答案是你不能 - 因为大小写字符有不同的数值 - 所以十六进制值完全不同 - 大写 A 是 x41 小写是 x61。您需要将十六进制值转换为字符串并对其进行不区分大小写的比较。
  • 任何其他出路,如果 nit 那么如何转换为字符串?

标签: mysql sql hex sql-like


【解决方案1】:

可以使用MySQL的unhex()方法,在where子句中将其转换为char。

像这样:

SELECT 
    col
FROM
    table
WHERE
    CAST(UNHEX(col) AS CHAR) LIKE '%ABSENT%'

但请注意,这对性能不太友好。您的表保存的记录越多,它的运行速度可能会越来越慢。

【讨论】:

  • 是的,这会很慢,但这可能是最干净的方式。如果您使用的是 MySQL 5.7+,则一项改进可能是使用存储的generated column,即UPPER(UNHEX(col)),然后在其上放置一个索引。当然,真正的答案是首先不要将要搜索的字符数据存储为十六进制流......
猜你喜欢
  • 2015-01-13
  • 1970-01-01
  • 2017-08-06
  • 2020-03-06
  • 2023-02-17
  • 2019-12-22
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
相关资源
最近更新 更多