任何人都可以告诉我SELECT默认情况下MySQL 的命令是否不区分大小写?如果没有,我必须发送什么命令,以便我可以执行以下操作:
SELECT * FROM `table` WHERE `Value` = "iaresavage"
Run Code Online (Sandbox Code Playgroud)
实际上,实际价值Value是IAreSavage.
Mar*_*c B 481
它们不区分大小写,除非您进行二进制比较.
Col*_*ert 109
您可以小写值和传递的参数:
SELECT * FROM `table` WHERE LOWER(`Value`) = LOWER("IAreSavage")
Run Code Online (Sandbox Code Playgroud)
另一种(更好的)方法是使用文档中COLLATE所述的运算符
小智 48
使用二进制
这是一个简单的选择
SELECT * FROM myTable WHERE 'something' = 'Something'
= 1
这是带二进制的选择
SELECT * FROM myTable WHERE BINARY 'something' = 'Something'
要么
SELECT * FROM myTable WHERE 'something' = BINARY 'Something'
= 0
ost*_*ach 38
当列使用以(例如默认排序规则)结束的排序规则时,比较不区分大小写,并且当列使用以或以(例如和排序规则)结尾的排序规则时,它们区分大小写._ci latin1_general_ci_cs_binutf8_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 |
+----------------------+-------------------+
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法检查表格排序:
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 |
Run Code Online (Sandbox Code Playgroud)
您可以将数据库,表或列排序规则更改为区分大小写的内容,如下所示:
-- 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;
Run Code Online (Sandbox Code Playgroud)
您的比较现在应区分大小写.
Ifa*_*bal 25
WHERE短语中的字符串比较不区分大小写.您可以尝试比较使用
WHERE `colname` = 'keyword'
Run Code Online (Sandbox Code Playgroud)
要么
WHERE `colname` = 'KeyWord'
Run Code Online (Sandbox Code Playgroud)
你会得到相同的结果.这是MySQL的默认行为.
如果您希望比较区分大小写,可以COLLATE像这样添加:
WHERE `colname` COLLATE latin1_general_cs = 'KeyWord'
Run Code Online (Sandbox Code Playgroud)
SQL会给出不同的结果:WHERE colnameCOLLATE latin1_general_cs ='keyword'
latin1_general_cs 是大多数数据库中的常见或默认排序规则.
默认情况下不区分大小写,但您应该首先看一下表格的创建方式,因为您可以在创建表时指定区分大小写.
下面的脚本创建了一个表.请注意底部显示"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;
Run Code Online (Sandbox Code Playgroud)
如果您的项目是可以创建自己的表,那么在创建表时指定区分大小写首选项是有意义的.
| 归档时间: |
|
| 查看次数: |
255454 次 |
| 最近记录: |