Like Case Sensitive in MySQL

后端 未结 8 2351
离开以前
离开以前 2020-11-29 06:38

I have a MySQL query:

SELECT concat_ws(title,description) as concatenated HAVING concatenated LIKE \'%SearchTerm%\';

And my table is encode

相关标签:
8条回答
  • 2020-11-29 06:47

    Try this:

    SELECT LOWER(CONCAT_WS(title,description)) AS concatenated 
    WHERE concatenated LIKE '%searchterm%'
    

    or (to let you see the difference)

    SELECT LOWER(CONCAT_WS(title,description)) AS concatenated 
    WHERE concatenated LIKE LOWER('%SearchTerm%')
    
    0 讨论(0)
  • 2020-11-29 06:49

    Check CHARSET mentioned in the table schema:

    show create table xyz;
    

    Based on CHARSET, you can try the following.

    select name from xyz where name like '%Man%' COLLATE latin1_bin;
    select name from xyz where name like '%Man%' COLLATE utf8_bin;
    

    Following are the cases which worked for me, CHARSET=latin1, MySQL version = 5.6.

    mysql> select installsrc from appuser where installsrc IS NOT NULL and installsrc like 'Promo%' collate latin1_bin limit 1;
    +-----------------------+
    | installsrc            |
    +-----------------------+
    | PromoBalance_SMS,null |
    +-----------------------+
    1 row in set (0.01 sec)
    
    mysql>
    mysql> select installsrc from appuser where installsrc IS NOT NULL and installsrc like 'PROMO%' collate latin1_bin limit 1;
    +---------------------------+
    | installsrc                |
    +---------------------------+
    | PROMO_SMS_MISSEDCALL,null |
    +---------------------------+
    1 row in set (0.00 sec)
    
    mysql> select installsrc from appuser where installsrc IS NOT NULL and installsrc like 'PROMO%' limit 1;
    +-----------------------+
    | installsrc            |
    +-----------------------+
    | PromoBalance_SMS,null |
    +-----------------------+
    1 row in set (0.01 sec)
    
    0 讨论(0)
  • 2020-11-29 06:51

    This problem is occurring in this case because of the collation used in the table. You have used utf8_general_ci as collation. If the collation is changed to utf8_general_ci then the searches will not be case sensitive. So, one possible solution is to change the collation.

    0 讨论(0)
  • 2020-11-29 07:03

    This works also:

    SELECT LOWER(DisplayName) as DN
    FROM   Bidders
    WHERE  OrgID=45
    HAVING DN like "cbbautos%"
    LIMIT  10;
    
    0 讨论(0)
  • 2020-11-29 07:12

    This is the working code:

    SELECT title,description
    FROM (
     SELECT title,description, LOWER(CONCAT_WS(title,description)) AS concatenated
     FROM table1 
    ) AS Q
    WHERE concatenated LIKE LOWER('%search%') 
    
    0 讨论(0)
  • 2020-11-29 07:13

    A much better solution in terms of performance:

    SELECT .... FROM .... WHERE `concatenated` LIKE BINARY '%SearchTerm%';
    

    String comparision is case-sensitive when any of the operands is a binary string.

    Another alternative is to use COLLATE,

    SELECT ....
    FROM ....
    WHERE `concatenated` like '%SearchTerm%' COLLATE utf8_bin;
    
    0 讨论(0)
提交回复
热议问题