MySQL不区分大小写选择

时间:2010-10-14 19:50:56

标签: mysql select

默认情况下,有人可以告诉我对MySQL的SELECT命令是否不区分大小写吗?如果没有,我必须发送什么命令,以便我可以执行以下操作:

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

实际上,Value的实际值是dicksavagewood

14 个答案:

答案 0 :(得分:452)

它们不区分大小写,除非您执行binary comparison

答案 1 :(得分:105)

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

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

另一种(更好)方法是使用COLLATE运算符作为in the documentation

答案 2 :(得分:48)

USE BINARY

这是一个简单的选择

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

= 1

这是带二进制的选择

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

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

= 0

答案 3 :(得分:30)

当列使用以_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;

您的比较现在应区分大小写。

答案 4 :(得分:25)

WHERE短语中的字符串比较不区分大小写。您可以尝试使用

进行比较
WHERE `colname` = 'keyword'

WHERE `colname` = 'KeyWord'

您将获得相同的结果。这是MySQL的默认行为。

如果您希望比较为区分大小写,则可以像这样添加COLLATE

WHERE `colname` COLLATE latin1_general_cs = 'KeyWord'

SQL会给出不同的结果:     在哪里colname收集latin1_general_cs ='keyword'

latin1_general_cs是大多数数据库中的常见或默认排序规则。

答案 5 :(得分:16)

您选择的排序规则设置是否区分大小写。

答案 6 :(得分:9)

默认值不区分大小写,但是  下一个最重要的事情 你应该看看表是如何创建的 首先,因为你可以指定案例 创建表时的灵敏度。

下面的脚本会创建一个表格。 在底部注意它说" 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;

如果你的项目是这样你可以创建你的 自己的表,那么指定你的表是有意义的 创建表时的区分大小写首选项。

答案 7 :(得分:4)

答案 8 :(得分:3)

尝试:

order by lower(column_name) asc;

答案 9 :(得分:2)

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

特别要注意Windows上的开发,它不区分大小写并部署到生产环境。例如:

"SELECT * from mytable" 

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

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

答案 10 :(得分:2)

当前接受的解决方案大多是正确。

如果您使用非二进制字符串(CHAR,VARCHAR,TEXT),则根据默认排序规则,比较不区分大小写。

如果您使用二进制字符串(BINARY,VARBINARY,BLOB),则比较区分大小写,因此您需要使用LOWER,如其他答案所述。

如果您没有使用默认排序规则,而是使用非二进制字符串,则区分大小写取决于所选的排序规则。

资料来源:https://dev.mysql.com/doc/refman/8.0/en/case-sensitivity.html。仔细阅读。其他一些人则误以为比较必须区分大小写或不区分大小写。事实并非如此。

答案 11 :(得分:0)

你可以尝试一下。 希望它会有用。

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

答案 12 :(得分:0)

设置了二进制标志的字符串字段将始终区分大小写。 如果您需要区分大小写的非二进制文本字段搜索,请使用以下命令: 选择“测试” REGEXP BINARY“测试”作为结果;

答案 13 :(得分:0)

对于像我这样处于类似状况的任何人,我可以使用以下方式添加我的解决方案:

就我而言,我必须选择所有按特定列值过滤的行。在该列中,有不同的值,例如'project_process','PROJECT_process','PROJECT_PROCESS'等。

注意:

项目/项目指的是某个项目名称,用大写/小写字母表示。

PROCESS / process指的是某个过程名称,用大写/小写字母表示。

此查询是解决方案:

SELECT * FROM `table_name` where process like '%project_process' 

(此查询使我可以获得所有可能的组合)