1

为什么以下查询适用于 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_timeoutCAST(@@wait_timeout AS INT)CONVERT(@@wait_timeout, SIGNED)(后者也适用于 MySQL)来解决此错误,但我想知道为什么第二个和第三个查询有效。

这里发生了什么?它不能是GREATEST操作,因为查询 3 有效,并且它不能是不同的变量类型,因为(隐式)转换在查询 2 中会失败(无论如何它应该具有相同的类型)。其他系统变量也会发生同样的事情。

顺便说一句:相同的查询在 MySQL 下工作(在 MySQL 5.6 版的 SQLfiddle 中尝试过)所以这是 MariaDB 和 MySQL 之间的不一致。

任何帮助表示赞赏!

4

1 回答 1

1

正如一些人猜对的那样:这是最近引入的一个错误(现已确认)。

有关更多详细信息,请查看 mariadb 问题跟踪器: https ://jira.mariadb.org/browse/MDEV-9516

更新 (2016-03-21)

关于 bugtracker,问题似乎已在 10.1.13 中修复。

于 2016-02-08T21:43:45.010 回答