MySQL,等于还是不等于?

标签 mysql sql select

在MySQL上看到这个有点疑惑

SELECT 1='1x';

给我 1

鉴于

SELECT 1='2x';

给我 0(如预期的那样)

进行二进制比较时

SELECT CAST(1 AS BINARY)=CAST('1x' AS BINARY);

它给了我 0(也符合预期)

问题:如何阻止 MySQL 的这种行为?我希望“=”作为 100% 二进制相等。我不希望 MySQL 假设或猜测我可能想要比较的内容。

最佳答案

当比较字符串和数字时,MySQL 会自动进行转换。

所以字符串被转换为一个数字,它从左到右开始并尝试从中生成一个数字。

所以

'1x' => 1
'x1' => 0 //because it does not start with a number on the left

你无法改变这种行为。而且您无论如何都不应该比较不同的数据类型。所以这是你的错:)

关于MySQL,等于还是不等于?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43609848/

相关文章:

mysql - 检查每行中的两列以匹配一组值

php - 根据 ID 选择行,然后再次根据文本框的基数选择行

c# - SQL Compact Edition 3.5 - 不允许访问数据库文件

MySql workbench CHECK 约束

mysql - 针对特定用户的 Django 过滤器

mysql - 数据库结构 - 最常见的查询跨越 3-4 个表。我应该减少 table 吗?

MySQL:按反向条件选择行

mysql - 如何构建预期给定结果的查询

mysql - 我如何进行此选择查询

database - 如何在 IF 语句中替换 SELECT 语句以使其工作