首页 > 解决方案 > 如何避免 SELECT 查询中的类型锁定

问题描述

我有一个services带有 column的表'some_col' bigint(20) unsigned NOT NULL。当我尝试从services值转换为负数中选择行时,如下所示:

SELECT -1 * some_col AS neg_some_col, some_other_columns...
FROM services
WHERE condition

我面临以下错误:

Error Code: 1690. BIGINT UNSIGNED value is out of range in '(-(1) * `services`.`some_col`)'

如何避免此限制并选择带有转换的列?

我没有进一步处理选定行的选项(在 MySQL 之后)。使用单个请求(可能的子查询)也很好。

标签: mysqlsql

解决方案


CAST(column AS SIGNED)

行得通!查看文档

您还可以通过设置来编辑 MySQL 配置以允许这样做:

sql_mode='NO_UNSIGNED_SUBTRACTION'

这里。但这当然允许它用于整个服务器。


推荐阅读