MySQL不区分大小写的select

任何人都可以告诉我,MySQL的SELECT命令默认是不区分大小写的吗? 如果不是的话,我需要发送什么命令,以便我可以这样做:

 SELECT * FROM `table` WHERE `Value` = "DickSavagewood" 

实际上,价值的实际Valuedicksavagewood

除非你进行二进制比较 ,否则它们不区分大小写。

您可以小写值和传递的参数:

 SELECT * FROM `table` WHERE LOWER(`Value`) = LOWER("DickSavagewood") 

另一种(更好的)方法是使用文档中所述的COLLATE操作符

USE BINARY

这是一个简单的select

SELECT * FROM myTable WHERE 'something' = 'Something'

= 1

这是一个select与二进制

SELECT * FROM myTable WHERE BINARY 'something' = 'Something'

要么

SELECT * FROM myTable WHERE 'something' = BINARY 'Something'

= 0

WHERE短语中的string比较不区分大小写。 你可以尝试比较使用

 WHERE `colname` = 'keyword' 

要么

 WHERE `colname` = 'KeyWord' 

你会得到同样的结果 。 这是MySQL的默认行为。

如果你想比较是区分大小写的 ,你可以像这样添加COLLATE

 WHERE `colname` COLLATE latin1_general_cs = 'KeyWord' 

该SQL会给这个不同的结果:WHERE colname COLLATE latin1_general_cs ='keyword'

latin1_general_cs是大多数数据库的常用或默认sorting规则。

当列使用以_ci结尾的归类(例如, 默认的 latin1_general_ci归类)时,比较是不区分大小写的,当列使用以_cs_bin结尾的归类时(例如utf8_unicode_csutf8_bin归类),它们区分大小写

检查整理

您可以使用以下方式检查您的服务器数据库连接归类:

 mysql> show variables like '%collation%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | utf8_general_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+ 

你可以使用以下方法检查你的表格整理:

 mysql> SELECT table_schema, table_name, table_collation FROM information_schema.tables WHERE table_name = `mytable`; +----------------------+------------+-------------------+ | table_schema | table_name | table_collation | +----------------------+------------+-------------------+ | myschema | mytable | latin1_swedish_ci | 

更改整理

您可以将数据库,表格或列整理更改为区分大小写,如下所示:

 -- Change database collation ALTER DATABASE `databasename` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- or change table collation ALTER TABLE `table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; -- or change column collation ALTER TABLE `table` CHANGE `Value` `Value` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin; 

现在你的比较应该是区分大小写的。

您select的sorting规则设置您是否区分大小写。

缺省情况是不区分大小写的,但是下一个最重要的事情是看看表是如何创build的,因为在创build表时可以指定区分大小写。

下面的脚本创build一个表。 注意在底部它说“COLLATE latin1_general_cs”。 最后的cs表示区分大小写。 如果你希望你的表不区分大小写,你可以把这个部分留出来,或者使用“COLLATE latin1_general_ci”。

  CREATE Table PEOPLE ( USER_ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, FIRST_NAME VARCHAR(50) NOT NULL, LAST_NAME VARCHAR(50) NOT NULL, PRIMARY KEY (USER_ID) ) ENGINE=MyISAM DEFAULT CHARACTER SET latin1 COLLATE latin1_general_cs AUTO_INCREMENT=0; 

如果您的项目可以创build自己的表格,那么在创build表格时指定您的区分大小写首选项是有意义的。

SQL Select不区分大小写。

这个链接可以告诉你如何使区分大小写: http : //sqlserver2000.databases.aspfaq.com/how-can-i-make-my-sql-queries-case-sensitive.html

另请注意,表名在Linux上区分大小写,除非将lower_case_table_name config指令设置为1 。 这是因为表在Linux中区分大小写的文件。

特别要小心在不区分大小写的Windows上进行开发,并将其部署到生产环境中。 例如:

 "SELECT * from mytable" 

对于表myTable将在Windows中成功,但在Linux中失败,除非设置了上述指令。

请参考: http : //dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

试试:

 order by lower(column_name) asc;