Bug #15867 | Union is causing at least one varchar column to be returned as binary | ||
---|---|---|---|
Submitted: | 19 Dec 2005 20:31 | Modified: | 14 Jun 2006 14:10 |
Reporter: | Paul Rony | Email Updates: | |
Status: | Can't repeat | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S1 (Critical) |
Version: | 5.0.18-BK, 5.0.16 | OS: | Linux (Linux, Windows 2003) |
Assigned to: | Evgeny Potemkin | CPU Architecture: | Any |
[19 Dec 2005 20:31]
Paul Rony
[20 Dec 2005 14:03]
Valeriy Kravchuk
Thank you for a bug report. I have a much simpler test case, verified on 5.0.18-BK (ChangeSet@1.1981, 2005-12-15 02:08:52-03:00) on Linux: mysql> create table tv(c1 varchar(100)); Query OK, 0 rows affected (0.01 sec) mysql> create function f1(p1 varchar(100)) returns varchar(100) return p1; Query OK, 0 rows affected (0.02 sec) mysql> select f1('abc'); +-----------+ | f1('abc') | +-----------+ | abc | +-----------+ 1 row in set (0.00 sec) mysql> create table tv1 as select f1(c1) from tv union select f1(c1) from tv; ERROR 1100 (HY000): Table 'tv1' was not locked with LOCK TABLES mysql> create view tv1 as select f1(c1) from tv union select f1(c1) from tv; Query OK, 0 rows affected (0.00 sec) mysql> desc tv1; +--------+----------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+----------------+------+-----+---------+-------+ | f1(c1) | varbinary(100) | YES | | NULL | | +--------+----------------+------+-----+---------+-------+ 1 row in set (0.01 sec) mysql> select version(); +-----------+ | version() | +-----------+ | 5.0.18 | +-----------+ 1 row in set (0.00 sec) In fact, even union may be not a problem here (although, take a look at bug #12185 also...). Look: mysql> create view v2 as select f1('abc'); Query OK, 0 rows affected (0.00 sec) mysql> desc v2; +-----------+----------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+----------------+------+-----+---------+-------+ | f1('abc') | varbinary(100) | YES | | NULL | | +-----------+----------------+------+-----+---------+-------+ 1 row in set (0.00 sec) There was similar but report already, but I can't find it. So, I'll mark this one as verified.
[14 Jun 2006 14:10]
Evgeny Potemkin
mysql> create table tv(c1 varchar(100)); Query OK, 0 rows affected (0.00 sec) mysql> create function f1(p1 varchar(100)) returns varchar(100) return p1; Query OK, 0 rows affected (0.00 sec) mysql> select f1('abc'); +-----------+ | f1('abc') | +-----------+ | abc | +-----------+ 1 row in set (0.00 sec) mysql> create view tv1 as select f1(c1) from tv union select f1(c1) from tv; Query OK, 0 rows affected (0.00 sec) mysql> desc tv1; +--------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+--------------+------+-----+---------+-------+ | f1(c1) | varchar(100) | YES | | NULL | | +--------+--------------+------+-----+---------+-------+ 1 row in set (0.00 sec) mysql> create view v2 as select f1('abc'); Query OK, 0 rows affected (0.00 sec) mysql> desc v2; +-----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+-------+ | f1('abc') | varchar(100) | YES | | NULL | | +-----------+--------------+------+-----+---------+-------+ 1 row in set (0.00 sec) mysql> select version(); +--------------+ | version() | +--------------+ | 5.0.22-debug | +--------------+ 1 row in set (0.00 sec)