mysql - 与 mysql 比较的有趣结果

标签 mysql sql select

我有一个表,其中一列 (mail_flag) 定义为 tinyint 值 = 0

当我设置 sql 语句时:select * from table where mail_flag = "r" 我得到所有行作为结果。其实我期待一个空的结果。有没有人解释一下?

最佳答案

如果您将一个数字(tinyint,在本例中)与一个字符进行比较,MySQL will attempt to convert the character to a number.更糟糕的是,它会在遇到的第一个非数字字符处截断字符串。在这里,由于没有数字字符,字符串被视为 0,当然,0 等于 0

为了获得合理的结果,您应该强制 MySQL 将数字转换为字符串,而不是默认转换:

SELECT *
FROM   mytable
WHERE  CAST(mail_flag AS CHAR(1)) = 'r'

关于mysql - 与 mysql 比较的有趣结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33091486/

相关文章:

mysql - 在Linux终端中执行插入查询

mysql - 如何在mysql中找到这种情况下的重复项和空白

java - 使用 Spring Hibernate 获取对象或特定列

mysql - 从其他表中插入一些值

MySQL validate_password_policy 未知系统变量

java - 如何只返回 hibernate 查询中的某些列?

mysql - 一张表中的复杂 SQL 查询

mysql - 创建博客数据库

mysql - SQL 如果单元格中至少有两个定义的值,则替换该单元格中的值

php - 如何在mysql中存储顺序数据