MySQL不区分大小写的select
任何人都可以告诉我,MySQL的SELECT
命令默认是不区分大小写的吗? 如果不是的话,我需要发送什么命令,以便我可以这样做:
SELECT * FROM `table` WHERE `Value` = "DickSavagewood"
实际上,价值的实际Value
是dicksavagewood
。
除非你进行二进制比较 ,否则它们不区分大小写。
您可以小写值和传递的参数:
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_cs
和utf8_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;