2014-02-27 44 views
4

我有两个值在数据库中像搜索由大写或小写字母的单词

  1. This is Name
  2. this is a name

我通过SQL查询来搜索短语th

SELECT * FROM [TABLE_NAME] WHERE title LIKE '%th%' 

然后这两个提交显示我只想sh ow this is a name部分。我应该如何继续。我试过preg_merge和其他部分,但他们没有工作。有没有可以distinguish capital and small letter的任何SQL查询。或者我可以搜索确切的术语的任何php方法。我的表格格式是UTF8。不是拉丁将军。

+1

将列的COLLATION更改为区分大小写。 – Deepak

回答

4

它会为你工作,尝试此查询

SELECT * FROM table_name WHERE BINARY title LIKE '%th%' 
+2

感谢您的回答。是的,我只是想要这个。 – Soumya

4
​​

Reference

默认字符集和归类是latin1的和latin1_swedish_ci,所以非二进制比较字符串的情况下默认不敏感的。这意味着如果使用col_name LIKE'a%'进行搜索,则会获得以A或a开头的所有列值。要使搜索区分大小写,请确保其中一个操作数具有区分大小写或二进制排序规则。例如,如果您比较一列和一个字符串,都有latin1字符集,你可以使用COLLATE操作符,使操作具有latin1_general_cs或latin1_bin校对特性:

更重要的是

如果您希望以区分大小写的方式始终处理列,请使用区分大小写或二进制排序规则来声明它。请参见第13.1.10节“CREATE TABLE语法”。

+0

不好意思。我的表格格式是UTF8。不是拉丁将军。所以整理将是utf8_general_ci。但它不在那里工作。我无法更改该字段的排序规则格式,因为该字段与其他许多字段相关联。 – Soumya

+0

拉丁将军不一定是你的问题的确切补救办法,它只是给你一个想法如何解决问题。您可以轻松更改查询中的排序规则名称,就像您必须更改表名称一样。 –

+0

是的,我明白了。但我尝试了Collat​​e utf_general_ci的查询,但没有奏效。我知道utf8不会支持区分大小写的部分,所以我有点困惑。而且我无法更改该字段的排序规则类型。 – Soumya

2

这是一种方式来选择与小写字母开头的单词。

此查询检查,如果第一个字符是由所述功能的小写LOWER(),并且如果以下字符是具有相同功能的一个小写LOWER()。

如果你想确保所有以下字符都是小写的,你可以使用LOWER(SUBSTRING(字从2))

SELECT title 
FROM [TABLE_NAME] 
WHERE (SUBSTRING(title, 1, 1) COLLATE latin1_bin) = LOWER(SUBSTRING(title, 1, 1)) 
AND (SUBSTRING(title, 2, 1) COLLATE latin1_bin) = LOWER(SUBSTRING(title, 2, 1)) 
1

$关键字= '%'。用strtolower($ _ GET [ 'Q' ])。 '%'; (“SELECT * FROM items WHERE LOWER(item_code)like'$ keywords'”);

+1

添加解释与您的代码将帮助很多:) –

相关问题