如何解决TINYINT UNSIGNED数据列不能减去MacOS中MySQL_8的where子句
以下是与MacOS一起运行的MySQL(8.0.x)中的数据:
ysql> desc t_room;
+--------------+-------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------------+------+-----+---------+-------+
| roomNum | varchar(60) | NO | PRI | NULL | |
| roomType | varchar(20) | NO | | NULL | |
| roomDesc | varchar(400) | YES | | NULL | |
| rentPayDay | tinyint unsigned | YES | | NULL | |
| rentFee | smallint unsigned | NO | | NULL | |
| asstMine | varchar(400) | YES | | NULL | |
| asstOwner | varchar(400) | YES | | NULL | |
| owner | varchar(30) | YES | | NULL | |
| signDate | date | YES | | NULL | |
| contract | mediumblob | YES | | NULL | |
| roomFacility | varchar(120) | YES | | NULL | |
+--------------+-------------------+------+-----+---------+-------+
11 rows in set (0.00 sec)
mysql> select rentPayDay from t_room;
+------------+
| rentPayDay |
+------------+
| 15 |
| 20 |
| 25 |
| 10 |
+------------+
4 rows in set (0.00 sec)
当我使用where子句进行查询时,一切都很好:
mysql> select roomNum,owner,rentPayDay from t_room where rentPayDay - 10 <= 5;
+---------------+--------+------------+
| roomNum | owner | rentPayDay |
+---------------+--------+------------+
| xxxC-906 | John | 15 |
| xxxxx-908 | Doe | 10 |
+---------------+--------+------------+
2 rows in set (0.00 sec)
但是,当我减去一个可能大于某些rentPayDay值的值时,像这样:
mysql> select roomNum,rentPayDay from t_room where rentPayDay - 11 <= 5;
事情出了错:
ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(`dev_learn`.`t_room`.`rentPayDay` - 11)'
有人对此有任何想法吗?为什么TINYINT数据不能在where子句中减去较大的数值?
解决方法
UNSIGNED TINYINT
has a range 0-255中不能包含负值。
如果遇到投放错误,请考虑:
SELECT * FROM rooms WHERE CAST(rentPayDay AS DECIMAL) - 11 <= 5;
,
参考@Akina和@Ken White,这是我对这个错误的猜测:
the express {columnName OPERATOR -value-} still be restricted as a whole with the same definition of {columnName}.
我不知道MySQL对我的查询的响应原因和发生的原因。 解决此问题的更好方法:
please refer to @Akina comment under my original question post.
非常感谢所有关心和帮助的人。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。