有人能告诉我,如果MySQL SELECT查询是大小写敏感或大小写不敏感默认?如果不是,我要发送什么查询,这样我就可以做一些事情:

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

实际上,价值的真正价值是IAreSavage。


当前回答

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

其他回答

在我的情况下,二进制或整理或字符集工作与我的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'];
    }
  }
}   

SQL Select不区分大小写。

这个链接可以告诉你如何区分大小写:http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i-make-my-sql-queries-case-sensitive.html

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

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

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

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

如果您的项目是这样的,您可以创建您的 自己的表,那么指定您的 在创建表时选择大小写。

它们是不区分大小写的,除非你做二进制比较。