mysql - BETWEEN 使用负值和无符号整数

标签 mysql

我有一个带有典型 unsigned int 主键 id

的表
select * from log_data where id between -129 and -120

似乎试图返回表中的每一行(或者至少在“发送数据”中停留数小时)

id  select_type table      type     possible_keys   key     key_len   ref   rows    Extra
1   SIMPLE      log_data    ALL     PRIMARY         NULL    NULL      NULL  357114  Using where

根据 BETWEEN 上的文档,位于 https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between : 如果所有参数都是同一类型,则这等同于表达式 (min <= expr AND expr <= max)

但是,

select * from log_data where -129 <= id and id <= -120 

表现如我所料。

id  select_type table   type    possible_keys   key     key_len  ref    rows    Extra
1   SIMPLE      NULL    NULL    NULL            NULL    NULL     NULL   NULL    Impossible WHERE noticed after reading const tables

这是一个错误,还是可以解释这种行为?

最佳答案

SELECT * FROM log_data WHERE id <= -129 and id >= -120

关于mysql - BETWEEN 使用负值和无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31692663/

相关文章:

java - mysql-connector 阻塞不再存在的连接。 Tomcat 卡住

php - 请求超时 该请求处理时间过长, 'Connection Timeout'

mysql - 删除MySQL前的STRING/字符

PHP MySQL 有没有办法从错误中获取列键

php - 如何在 PHP PDO for MySQL 中使用 VARBINARY 准备语句?

php - mssql_rows_affected 返回错误的行数

php - 我可以免受 SQL 注入(inject)攻击吗?

php - 我如何向新注册用户发送确认电子邮件?

php - 从特定用户以前从未见过的 mysql 表中提取一个随机 ID

php - 创建自定义 WHERE 子句以过滤数据表