设置会话变量时 MariaDB 类型错误
MariaDB type error when setting session variable
为什么以下查询适用于 Maria DB (10.1.9)...
SET SESSION wait_timeout = 28000;
SET SESSION wait_timeout = @@wait_timeout;
SELECT GREATEST(28000, @@wait_timeout);
...但那个不是?
SET SESSION wait_timeout = GREATEST(28000, @@wait_timeout)
它抛出类型错误:
#1232 - Incorrect argument type to variable 'wait_timeout`
尽管可以通过将 @wait_timeout
替换为 CAST(@@wait_timeout AS INT)
或 CONVERT(@@wait_timeout, SIGNED)
(后者也适用于 MySQL)来解决此错误,但我想知道为什么第二个和第三个查询工作。
这是怎么回事? 它不可能是 GREATEST 操作,因为查询 3 有效并且它不可能是不同的变量类型,因为(隐式)转换在查询 2 中会失败(无论如何它应该具有相同的类型)。其他系统变量也会发生同样的事情。
顺便说一句:相同的查询在 MySQL 下工作(在 MySQL 版本 5.6 的 SQLfiddle 中尝试过)所以这是 MariaDB 和 MySQL 之间的不一致。
感谢任何帮助!
正如一些人猜对的那样:这是最近引入的一个错误(现已确认)。
有关更多详细信息,请查看 mariadb 问题跟踪器:
https://jira.mariadb.org/browse/MDEV-9516
更新 (2016-03-21)
关于 bugtracker,问题似乎已在 10.1.13 中修复。
为什么以下查询适用于 Maria DB (10.1.9)...
SET SESSION wait_timeout = 28000;
SET SESSION wait_timeout = @@wait_timeout;
SELECT GREATEST(28000, @@wait_timeout);
...但那个不是?
SET SESSION wait_timeout = GREATEST(28000, @@wait_timeout)
它抛出类型错误:
#1232 - Incorrect argument type to variable 'wait_timeout`
尽管可以通过将 @wait_timeout
替换为 CAST(@@wait_timeout AS INT)
或 CONVERT(@@wait_timeout, SIGNED)
(后者也适用于 MySQL)来解决此错误,但我想知道为什么第二个和第三个查询工作。
这是怎么回事? 它不可能是 GREATEST 操作,因为查询 3 有效并且它不可能是不同的变量类型,因为(隐式)转换在查询 2 中会失败(无论如何它应该具有相同的类型)。其他系统变量也会发生同样的事情。
顺便说一句:相同的查询在 MySQL 下工作(在 MySQL 版本 5.6 的 SQLfiddle 中尝试过)所以这是 MariaDB 和 MySQL 之间的不一致。
感谢任何帮助!
正如一些人猜对的那样:这是最近引入的一个错误(现已确认)。
有关更多详细信息,请查看 mariadb 问题跟踪器: https://jira.mariadb.org/browse/MDEV-9516
更新 (2016-03-21)
关于 bugtracker,问题似乎已在 10.1.13 中修复。