【问题标题】:MySQL Is Strictly Equal to Operator?MySQL 是否严格等于运算符?
【发布时间】:2012-06-26 23:09:15
【问题描述】:

在许多编程语言中都有基本的等号运算符,它会查看两个字符串的文本是否相等:

if ("Hi" == "hi") {
  //this code runs
}

但也有严格的等于运算符:

if ("Hi" === "hi") {
  //this code will never run
}

上面的代码sn-p在MySQL中是否有等价的操作符? = 运营商只是没有削减它。如果我跑:

SELECT * FROM users WHERE name = 'john';

MySQL 将返回带有John 和大写“J”的行。

感谢您的宝贵时间。

【问题讨论】:

标签: mysql sql operators equals


【解决方案1】:

您可以使用COLLATE 运算符将列转换为区分大小写的排序规则:

SELECT * FROM users WHERE name LIKE 'john' COLLATE utf8_bin

MySQL documentation 区分大小写。

【讨论】:

  • 嗯...我的表格排序规则设置为latin1_swedish_ci。运行上述代码示例#1253 - COLLATION 'latin1_general_cs' is not valid for CHARACTER SET 'utf8' 时出现此错误
  • 然后尝试utf8_bin排序规则。
  • 是的,我试过了,但无济于事。这是创建我正在使用的表的 SQL CREATE TABLE IF NOT EXISTS users ( /* Some columns, indexes, and primary keys */ ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  • 你的 UTF8 字符集也不可能有 latin1_swedish_ci。重要的是要注意 LIKE 和 = 之间的区别。当使用= 时,它会忽略尾随空格进行比较,而 LIKE 不会忽略尾随空格。 LIKE 更严格,可能是你想要的。
【解决方案2】:

你可以使用STRCMP

SELECT * FROM users WHERE STRCMP(name, 'john') = 0;

注意:

  • 0 = 相同
  • -1 = 第一个元素更小
  • 1 = 第一个元素更大

必须使用 COLLATES 如果您使用的是 MySQL 4.0+(STRCMP 不再区分大小写)

  • COLLATE utf8_general_ci = 不区分大小写 (ci)
  • COLLATE utf8_general_cs = 区分大小写 (cs)

【讨论】:

  • 不过,这不能使用任何索引。
  • SELECT STRCMP('John', 'john') ; 在我的机器中返回0
  • 对,刚刚看到这个函数使用了字段排序,那我们还是要指定COLLATE utf8_general_cs
  • SELECT STRCMP('John', 'john' COLLATE utf8_bin); 愉快地返回 -1 :) SELECT STRCMP('John' COLLATE utf8_bin, 'john'); 也是如此
  • 哇,我找到了! STRCMP 区分大小写的(在 MySQL 4.0 之前)
猜你喜欢
  • 2023-02-06
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 2016-01-05
  • 1970-01-01
  • 2020-02-18
相关资源
最近更新 更多