默认情况下,有人可以告诉我对MySQL的SELECT
命令是否不区分大小写吗?如果没有,我必须发送什么命令,以便我可以执行以下操作:
SELECT * FROM `table` WHERE `Value` = "DickSavagewood"
实际上,Value
的实际值是dicksavagewood
。
答案 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_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;
您的比较现在应区分大小写。
答案 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)
SQL Select不区分大小写。
此链接可以向您展示如何区分大小写:http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i-make-my-sql-queries-case-sensitive.html
答案 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'
(此查询使我可以获得所有可能的组合)