Mysql - 字符串中的大写字母

时间:2013-11-26 19:43:02

标签: mysql capitalization

在我的数据库中,我有一个Varchar条目:zZz

注意资本。

我让用户输入他们的用户名并检查条目。但是我试图通过不正确地编写用户名zzz来解决它 - 请注意全部小写。

Mysql说一切都好,当我期望它返回false时,它返回true。我究竟做错了什么。这是我的函数($ db是一个有效的数据库句柄):

function IsUsername($db, $Username)
{
    $stmtIsUsername = $db->prepare("SELECT Username FROM members WHERE "
              . "Username = :Username");
    $stmtIsUsername->execute(array(':Username' => $Username));
    $ret = ($stmtIsUsername && isset($stmtIsUsername) && $stmtIsUsername->rowCount() > 0) ? true : false;
    $stmtIsUsername->closeCursor(); // mysql_free_result equivalent
    return $ret;
}

在我的数据库中,用户名= zZz

我正在调用以下内容($ db有效)

$userInput = $_GET['username']; // Which is "zzz"
if(IsUsername($db, $userInput))
{
    echo "All is OK";
} else
{
    echo "The user is not valid";
}

回声令人讨厌“一切都好”。我做错了什么?

1 个答案:

答案 0 :(得分:1)

默认字符集和排序规则是latin1和latin1_swedish_ci,因此非二进制字符串比较默认情况下不区分大小写。这意味着如果使用col_name LIKE'a%'进行搜索,则会获得以A或a开头的所有列值。要使此搜索区分大小写,请确保其中一个操作数具有区分大小写或二进制排序规则。例如,如果要比较具有latin1字符集的列和字符串,则可以使用COLLATE运算符使任一操作数具有latin1_general_cs或latin1_bin排序规则:

col_name COLLATE latin1_general_cs LIKE'a%' col_name LIKE'a%'COLLATE latin1_general_cs col_name COLLATE latin1_bin LIKE'a%' col_name LIKE'a%'COLLATE latin1_bin 如果希望始终以区分大小写的方式处理列,请使用区分大小写或二进制排序规则来声明它。请参见第13.1.10节“CREATE TABLE语法”。

[http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html]