有人能告诉我,如果MySQL SELECT查询是大小写敏感或大小写不敏感默认?如果不是,我要发送什么查询,这样我就可以做一些事情:
SELECT * FROM `table` WHERE `Value` = "iaresavage"
实际上,价值的真正价值是IAreSavage。
有人能告诉我,如果MySQL SELECT查询是大小写敏感或大小写不敏感默认?如果不是,我要发送什么查询,这样我就可以做一些事情:
SELECT * FROM `table` WHERE `Value` = "iaresavage"
实际上,价值的真正价值是IAreSavage。
当前回答
当列使用以_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;
您的比较现在应该是区分大小写的。
其他回答
当列使用以_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;
您的比较现在应该是区分大小写的。
WHERE短语中的字符串比较不区分大小写。你可以试着比较使用
WHERE `colname` = 'keyword'
or
WHERE `colname` = 'KeyWord'
你会得到同样的结果。这是MySQL的默认行为。
如果你想让比较区分大小写,你可以添加COLLATE,就像这样:
WHERE `colname` COLLATE latin1_general_cs = 'KeyWord'
SQL会给出不同的结果: WHERE colname COLLATE latin1_general_cs = '关键字'
Latin1_general_cs是大多数数据库中常见或默认的排序规则。
带有二进制标志设置的字符串字段将始终区分大小写。 如果你需要对非二进制文本字段进行区分大小写的搜索,请使用以下方法: SELECT 'test' REGEXP二进制'test'作为结果;
在我的情况下,二进制或整理或字符集工作与我的UTF8表。
我的表中有用户名,如henry, henry, susan, susan或susan,并通过比较名称的字节序列来查找各自的用户。
下面的函数创建字节序列:
function makeByteString($string){
$tmp = "";
for($i=0;$i<strlen($string);$i++){
$sign = substr($string,$i,1);
$tmp.=ord($sign);
}
return $tmp;
}
SQL查询找到正确的id:
$sql = "SELECT id, username FROM users WHERE `username` = ? ";
$stmt = $conn->prepare($sql);
$stmt->execute([$strUsername]); //e.g. susan, Susan or suSan
$rows = $stmt->rowCount();
if($stmt && $rows>0){
while ($row = $stmt->fetch()) {
if(makeByteString($strUsername) ==
makeByteString(trim($row["username"]))){
$id = $row['id'];
}
}
}
使用二进制
这是一个简单的选择
SELECT * FROM myTable WHERE 'something' = 'something'
= 1
这是一个二进制选择
SELECT * FROM myTable WHERE BINARY 'something' = 'something'
or
SELECT * FROM myTable WHERE 'something' = BINARY '
= 0