【问题标题】:utf8_unicode_ci not returning case insensitive results?utf8_unicode_ci 不返回不区分大小写的结果?
【发布时间】:2013-06-14 05:32:21
【问题描述】:

我有以下代码:

[...]

// Escape values
$username = $mysqli->real_escape_string($username);
$password = $mysqli->real_escape_string($password);

// Create the SQL string
$sql = "SELECT * 
FROM users 
WHERE username = '$username' AND password = '$password';";

// Run query
if ($result = $mysqli->query($sql)) {

[...]

嗯,我有一个用户名 ChrisB5。 ChrisB5 使用正确的密码正确验证,但是...... chrisb5 验证失败。我有 utf8_unicode_ci,所以...数据库在搜索时应该不区分大小写,对吗?如果有帮助的话,我的数据库类型是 MyISAM。我做错了什么?...谢谢!

编辑:
我在 phpmyadmin 中运行了以下代码并且它工作了......但是使用 PHP 的 mysqli 不起作用!这对我来说很奇怪......

选择 *
FROM users
在哪里username = 'chrisb5'
限制 0 , 30

这返回了 ChrisB5 的记录。

我还发现我的服务器默认为 latin1 ......但是我按照建议将其修复为默认为 utf8 并且仍然没有运气!值得一试。

【问题讨论】:

  • 在 SQL 查询中你的 MySQL 服务器会输出什么:SELECT COLLATION(`username`), COLLATION(`password`) FROM `users`;
  • @MichaelSivolobov: COLLATION(username) COLLATION(password) utf8_unicode_ci utf8_unicode_ci
  • 对不起,我是这个网站的新手,无法弄清楚我的 cmets 的所有语法,但简而言之,如果有帮助的话,两者都返回了 utf8_unicode_ci。

标签: php mysql mysqli phpmyadmin


【解决方案1】:

搜索时数据库应该不区分大小写,对吗?

是的。

我做错了什么?

实际上没有人知道。它可以是任何东西
看,你是根据间接后果来判断的。身份验证失败可能是由无数问题引起的,不一定与编码有关。

针对 2 个常量名称运行两个直接查询的调试代码可能更可靠。

这应该不是问题,但请确保您正在运行

$mysqli->set_charset('utf8');

连接后。

【讨论】:

  • 我确实尝试过这个,但仍然没有运气。我将其设置为“$mysqli->set_charset("utf8_general_ci");"之前。我把它改成 utf8 还是不行。
猜你喜欢
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多