2013-05-20 63 views
1

我正面临着MySQL,UNCOMPRESS函数的问题。MySQL解压缩问题

我有表名为useruser_details商店COMPRESS值。在这种情况下,在从user_details搜索值之前,我必须UNCOMPRESS它。

但问题是我做UNCOMPRESS后,搜索成为情况下,sensetive

如..如

如果我尝试下面的SQL,它只会搜索包含CAPITAL测试字忽略小的情况下测试字

SELECT * FORM用户WHERE值UNCOMPRESS(user_details)LIKE'%TESTING%'。

我希望区分大小写的搜索。

回答

3

但是问题出在我做UNCOMPRESS之后,搜索变得很有规律。

这是because COMPRESS()“压缩字符串,并返回结果作为二进制字符串。”(重点煤矿)

当您在一个二进制字符串进行LIKE操作,binary comparison将执行(这是区分大小写的)。

您或许可以通过在COMPRESS()声明周围添加CAST()来避开此情况。

但是,你可能不应该这样做,摆在首位。这是一种极其低效的方式来搜索大量的数据。 MySQL将不得不为每个行解压缩,并且没有机会使用任何内部优化方法(如索引)。

首先不要使用COMPRESS()

+0

谢谢... CAST()工作 –

+0

@Poonam欢迎您,但请记住,这真的是非常低效。我将摆脱COMPRESS() –

2

试试这个:

SELECT * FROM `user` WHERE LOWER(UNCOMPRESS(user_details)) LIKE '%testing%' 

但作为佩卡也指出或它的效率非常低。如果您使用MyIsam Engine的另一种替代方法是myisampack,它会压缩孔表及其仍然可以查询。

+0

它不起作用 –

+0

这是查询“FORM” - >“FROM”中的拼写错误尝试现在请pls – Stephan