mysql - 错误代码 : 1264. 第 1 行 'XXX' 列的值超出范围

标签 mysql linux windows ubuntu centos

我的存储过程有页码的 IN 参数 ( IN page INT ) 一切都适用于任何值<= 2147483647 . 如果值为 > 2147483647我收到错误 1264 . 这一切都发生在5.6.26 Community Server compiled for Linux (x86_64) 5.6.24 Community Server compiled for Win64 (x86_64) 也一样 以上所有都很好,我理解错误。

但是,在服务器上5.6.30-1+deb.sury.org~xenial+2 (Ubuntu) compiled for debian-linux-gnu (x86_64)这不是转载。无论我向那里传递什么值,输入值都会被截断为 2147483647。

什么设置导致这个“自动最大值上限”?如何在不重新安装的情况下同步不同环境中的设置以获得相同的行为?

谢谢!

最佳答案

检查 5.1.7 Server SQL Modes .

mysql> SELECT @@GLOBAL.SQL_MODE, @@SESSION.SQL_MODE;
+--------------------------------------------+--------------------------------------------+
| @@GLOBAL.SQL_MODE                          | @@SESSION.SQL_MODE                         |
+--------------------------------------------+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+--------------------------------------------+
1 row in set (0.00 sec)

mysql> DELIMITER //

mysql> DROP PROCEDURE IF EXISTS `sp_test`//
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE PROCEDURE `sp_test`(IN `page` INT)
    -> BEGIN
    ->   SELECT `page`;
    -> END//
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;

mysql> CALL `sp_test`(2147483647);
+------------+
| `page`     |
+------------+
| 2147483647 |
+------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> CALL `sp_test`(2147483648);
ERROR 1264 (22003): Out of range value for column 'page' at row 1

mysql> SET @@SESSION.SQL_MODE = 'NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected (0.00 sec)

mysql> select @@GLOBAL.SQL_MODE, @@SESSION.SQL_MODE;
+--------------------------------------------+------------------------+
| @@GLOBAL.SQL_MODE                          | @@SESSION.SQL_MODE     |
+--------------------------------------------+------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+------------------------+
1 row in set (0.00 sec)

mysql> CALL `sp_test`(2147483648);
+------------+
| `page`     |
+------------+
| 2147483647 |
+------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+---------+------+-----------------------------------------------+
| Level   | Code | Message                                       |
+---------+------+-----------------------------------------------+
| Warning | 1264 | Out of range value for column 'page' at row 1 |
+---------+------+-----------------------------------------------+
1 row in set (0.00 sec)

关于mysql - 错误代码 : 1264. 第 1 行 'XXX' 列的值超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37540329/

相关文章:

php - 使用 PHP 将 HTML 日期输入到 SQL

ruby - 在 CentOS 中安装 ruby​​ fastCGI 绑定(bind)时出错。如何避免~>_<~

.net - 强制 Windows 显示系统托盘图标

windows - 以编程方式抑制大容量存储设备的自动播放

c++ - 在 Windows 服务和 win32 应用程序 C++ 之间使用 IPC

php - 更新当前值大于旧值 codeigniter 的 mysql 数据库

mysql - Node 和Deno服务器访问相同的MySQL数据库

php - 使用灵活的 where 子句将 LEFT JOIN 结果限制为 1

linux - 如何使用 shell 脚本查找具有最大上下文长度的行号?

regex - 查找/替换目录和 Bash 脚本