用view + case + null检查奇怪的mysql截断警告

时间:2014-05-09 03:03:07

标签: mysql percona

当我使用视图,case语句和null检查的组合时,我从MySQL查询中得到一个奇怪的警告。我相信我有一个最小的测试用例:

create table t (x char(1)) default charset 'utf8';

insert into t values ('a');

create or replace view v as select case when true then x end as y from t;

select y is null from v;

show warnings;

我明白了:

+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: 'a  ' |
+---------+------+------------------------------------------+

当我内联视图,删除case语句或删除空检查时,警告消失。

另一个令人困惑的事情是,在警告消息中,无论我们在create tableinsert语句中设置该长度,字符串都被右边填充到其原始长度的3倍。如果我从default charset 'utf8'语句中删除create table,则右边填充消失,但警告仍然存在。

请注意,此警告实际上在我的用例中变为错误,其中我执行以下操作:

create table t2 (x char(1)) default charset 'utf8';

insert into t2 select y is null from v;

我无法找到有关此问题的错误报告,我认为这不是预期的行为。我正在使用服务器版本:5.6.11-56-log Percona Server(GPL),版本rc60.3,修订版376.任何人都可以解释它为什么会发生和/或建议解决方法吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方法并将其发布在此处,以防其他人遇到同样的问题。而不是:

select y is null from v

使用此:

select y is null from (select y from v) as _

不知道为什么会有效,但确实有效。