我面临着MySQL,UNCOMPRESS功能的问题。
我的表名为user
,user_details
存储 COMPRESS 值。在这种情况下,在搜索user_details
i中的值之前必须 UNCOMPRESS 。
但问题是在我 UNCOMPRESS 之后,搜索变为 案例敏感 。
喜欢......例如
如果我在sql下面尝试,它只会搜索包含 CAPITAL TESTING字和忽略小案例测试字
的值SELECT * FORM user WHERE UNCOMPRESS(user_details)LIKE'% TESTING %'。
我想要不区分大小写的搜索。
答案 0 :(得分:3)
但问题是在我做UNCOMPRESS之后,搜索变得具有案例感。
这是because COMPRESS()
“压缩字符串并将结果作为二进制字符串返回。”(强调我的)
当您对二进制字符串执行LIKE操作时,将执行binary comparison(区分大小写)。
您可以通过在COMPRESS()
声明周围添加CAST()
来避免这种情况。
但你可能不应该首先这样做。这是一种极其低效的搜索大量数据的方法。 MySQL必须为此操作解压缩每个行,并且无法使用任何内部优化方法(如索引)。
首先不要使用COMPRESS()
。
答案 1 :(得分:2)
试试这个:
SELECT * FROM `user` WHERE LOWER(UNCOMPRESS(user_details)) LIKE '%testing%'
但是,因为 Pekka 指向得很好或者效率很低。如果您使用MyIsam引擎另一个替代方案是myisampack,它会压缩空洞表并且仍然可查询。