Details
-
Bug
-
Status: Open (View Workflow)
-
Major
-
Resolution: Unresolved
-
10.3(EOL), 10.4(EOL)
-
None
Description
I create this test file:
# Copy a table with the old MySQL-4.0 VARCHAR |
let $MYSQLD_DATADIR= `select @@datadir`; |
copy_file $MYSQL_TEST_DIR/std_data/vchar.frm $MYSQLD_DATADIR/test/vchar.frm;
|
truncate table vchar; |
SHOW CREATE TABLE vchar; |
|
CREATE TABLE t2_simple AS SELECT v FROM vchar; |
SHOW CREATE TABLE t2_simple; |
DROP TABLE t2_simple; |
|
CREATE TABLE t2_union_vv AS SELECT v FROM vchar UNION SELECT v FROM vchar; |
SHOW CREATE TABLE t2_union_vv; |
DROP TABLE t2_union_vv; |
|
CREATE TABLE t2_union_vn AS SELECT v FROM vchar UNION SELECT NULL; |
SHOW CREATE TABLE t2_union_vn; |
DROP TABLE t2_union_vn; |
|
CREATE TABLE t2_union_nv AS SELECT NULL AS v UNION SELECT v FROM vchar; |
SHOW CREATE TABLE t2_union_nv; |
DROP TABLE t2_union_nv; |
|
DROP TABLE vchar; |
Now I run this test and it produces the following output:
truncate table vchar;
|
SHOW CREATE TABLE vchar;
|
Table Create Table
|
vchar CREATE TABLE `vchar` (
|
`v` varchar(30) DEFAULT NULL,
|
`c` char(3) DEFAULT NULL,
|
`e` enum('abc','def','ghi') DEFAULT NULL,
|
`t` text DEFAULT NULL
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
CREATE TABLE t2_simple AS SELECT v FROM vchar;
|
SHOW CREATE TABLE t2_simple;
|
Table Create Table
|
t2_simple CREATE TABLE `t2_simple` (
|
`v` varchar(30) DEFAULT NULL
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
DROP TABLE t2_simple;
|
CREATE TABLE t2_union_vv AS SELECT v FROM vchar UNION SELECT v FROM vchar;
|
SHOW CREATE TABLE t2_union_vv;
|
Table Create Table
|
t2_union_vv CREATE TABLE `t2_union_vv` (
|
`v` char(30) DEFAULT NULL
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
DROP TABLE t2_union_vv;
|
CREATE TABLE t2_union_vn AS SELECT v FROM vchar UNION SELECT NULL;
|
SHOW CREATE TABLE t2_union_vn;
|
Table Create Table
|
t2_union_vn CREATE TABLE `t2_union_vn` (
|
`v` char(30) DEFAULT NULL
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
DROP TABLE t2_union_vn;
|
CREATE TABLE t2_union_nv AS SELECT NULL AS v UNION SELECT v FROM vchar;
|
SHOW CREATE TABLE t2_union_nv;
|
Table Create Table
|
t2_union_nv CREATE TABLE `t2_union_nv` (
|
`v` char(30) DEFAULT NULL
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
DROP TABLE t2_union_nv;
|
DROP TABLE vchar;
|
Notice:
- the data type in t2_simple is VARCHAR as expected.
- the data type in t2_union_vv, t2_union_vn, t2_union_nv is CHAR, which is wrong.
Note, if I replace copying of vchar.frm (the old VARCHAR) to a normal CREATE like this:
CREATE TABLE vchar (v VARCHAR(30)); |
and return the test, it correctly creates VARCHAR in all queries.
So this problem is specific to the old VARCHAR.
Attachments
Activity
Description |
I create this test file:
{code:sql} let $MYSQLD_DATADIR= `select @@datadir`; copy_file $MYSQL_TEST_DIR/std_data/vchar.frm $MYSQLD_DATADIR/test/vchar.frm; truncate table vchar; SHOW CREATE TABLE vchar; CREATE TABLE t2_simple AS SELECT v FROM vchar; SHOW CREATE TABLE t2_simple; DROP TABLE t2_simple; CREATE TABLE t2_union_vv AS SELECT v FROM vchar UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_vv; DROP TABLE t2_union_vv; CREATE TABLE t2_union_vn AS SELECT v FROM vchar UNION SELECT NULL; SHOW CREATE TABLE t2_union_vn; DROP TABLE t2_union_vn; CREATE TABLE t2_union_nv AS SELECT NULL AS v UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_nv; DROP TABLE t2_union_nv; DROP TABLE vchar; {code} Now I run this test and it produces the following output: {noformat} truncate table vchar; SHOW CREATE TABLE vchar; Table Create Table vchar CREATE TABLE `vchar` ( `v` varchar(30) DEFAULT NULL, `c` char(3) DEFAULT NULL, `e` enum('abc','def','ghi') DEFAULT NULL, `t` text DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 CREATE TABLE t2_simple AS SELECT v FROM vchar; SHOW CREATE TABLE t2_simple; Table Create Table t2_simple CREATE TABLE `t2_simple` ( `v` varchar(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_simple; CREATE TABLE t2_union_vv AS SELECT v FROM vchar UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_vv; Table Create Table t2_union_vv CREATE TABLE `t2_union_vv` ( `v` char(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_union_vv; CREATE TABLE t2_union_vn AS SELECT v FROM vchar UNION SELECT NULL; SHOW CREATE TABLE t2_union_vn; Table Create Table t2_union_vn CREATE TABLE `t2_union_vn` ( `v` char(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_union_vn; CREATE TABLE t2_union_nv AS SELECT NULL AS v UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_nv; Table Create Table t2_union_nv CREATE TABLE `t2_union_nv` ( `v` char(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_union_nv; DROP TABLE vchar; {noformat} Notice: - the data type in {{t2_simple}} is {{VARCHAR}} as expected. - the data type in {{t2_union_vv}}, {{t2_union_vn}}, {{t2_union_nv}} is {{CHAR}}, which is wrong. |
I create this test file:
{code:sql} # Copy a table with the old MySQL-4.0 {{VARCHAR}} let $MYSQLD_DATADIR= `select @@datadir`; copy_file $MYSQL_TEST_DIR/std_data/vchar.frm $MYSQLD_DATADIR/test/vchar.frm; truncate table vchar; SHOW CREATE TABLE vchar; CREATE TABLE t2_simple AS SELECT v FROM vchar; SHOW CREATE TABLE t2_simple; DROP TABLE t2_simple; CREATE TABLE t2_union_vv AS SELECT v FROM vchar UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_vv; DROP TABLE t2_union_vv; CREATE TABLE t2_union_vn AS SELECT v FROM vchar UNION SELECT NULL; SHOW CREATE TABLE t2_union_vn; DROP TABLE t2_union_vn; CREATE TABLE t2_union_nv AS SELECT NULL AS v UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_nv; DROP TABLE t2_union_nv; DROP TABLE vchar; {code} Now I run this test and it produces the following output: {noformat} truncate table vchar; SHOW CREATE TABLE vchar; Table Create Table vchar CREATE TABLE `vchar` ( `v` varchar(30) DEFAULT NULL, `c` char(3) DEFAULT NULL, `e` enum('abc','def','ghi') DEFAULT NULL, `t` text DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 CREATE TABLE t2_simple AS SELECT v FROM vchar; SHOW CREATE TABLE t2_simple; Table Create Table t2_simple CREATE TABLE `t2_simple` ( `v` varchar(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_simple; CREATE TABLE t2_union_vv AS SELECT v FROM vchar UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_vv; Table Create Table t2_union_vv CREATE TABLE `t2_union_vv` ( `v` char(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_union_vv; CREATE TABLE t2_union_vn AS SELECT v FROM vchar UNION SELECT NULL; SHOW CREATE TABLE t2_union_vn; Table Create Table t2_union_vn CREATE TABLE `t2_union_vn` ( `v` char(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_union_vn; CREATE TABLE t2_union_nv AS SELECT NULL AS v UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_nv; Table Create Table t2_union_nv CREATE TABLE `t2_union_nv` ( `v` char(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_union_nv; DROP TABLE vchar; {noformat} Notice: - the data type in {{t2_simple}} is {{VARCHAR}} as expected. - the data type in {{t2_union_vv}}, {{t2_union_vn}}, {{t2_union_nv}} is {{CHAR}}, which is wrong. Note, if I replace copying of {{vchar.frm}} (the old VARCHAR) to a normal {{CREATE}} like this: {code:sql} CREATE TABLE vchar (v VARCHAR(30)); {code} and return the test, it correctly creates {{VARCHAR}} in all queries. So this problem is specific to the old {{VARCHAR}}. |
Description |
I create this test file:
{code:sql} # Copy a table with the old MySQL-4.0 {{VARCHAR}} let $MYSQLD_DATADIR= `select @@datadir`; copy_file $MYSQL_TEST_DIR/std_data/vchar.frm $MYSQLD_DATADIR/test/vchar.frm; truncate table vchar; SHOW CREATE TABLE vchar; CREATE TABLE t2_simple AS SELECT v FROM vchar; SHOW CREATE TABLE t2_simple; DROP TABLE t2_simple; CREATE TABLE t2_union_vv AS SELECT v FROM vchar UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_vv; DROP TABLE t2_union_vv; CREATE TABLE t2_union_vn AS SELECT v FROM vchar UNION SELECT NULL; SHOW CREATE TABLE t2_union_vn; DROP TABLE t2_union_vn; CREATE TABLE t2_union_nv AS SELECT NULL AS v UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_nv; DROP TABLE t2_union_nv; DROP TABLE vchar; {code} Now I run this test and it produces the following output: {noformat} truncate table vchar; SHOW CREATE TABLE vchar; Table Create Table vchar CREATE TABLE `vchar` ( `v` varchar(30) DEFAULT NULL, `c` char(3) DEFAULT NULL, `e` enum('abc','def','ghi') DEFAULT NULL, `t` text DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 CREATE TABLE t2_simple AS SELECT v FROM vchar; SHOW CREATE TABLE t2_simple; Table Create Table t2_simple CREATE TABLE `t2_simple` ( `v` varchar(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_simple; CREATE TABLE t2_union_vv AS SELECT v FROM vchar UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_vv; Table Create Table t2_union_vv CREATE TABLE `t2_union_vv` ( `v` char(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_union_vv; CREATE TABLE t2_union_vn AS SELECT v FROM vchar UNION SELECT NULL; SHOW CREATE TABLE t2_union_vn; Table Create Table t2_union_vn CREATE TABLE `t2_union_vn` ( `v` char(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_union_vn; CREATE TABLE t2_union_nv AS SELECT NULL AS v UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_nv; Table Create Table t2_union_nv CREATE TABLE `t2_union_nv` ( `v` char(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_union_nv; DROP TABLE vchar; {noformat} Notice: - the data type in {{t2_simple}} is {{VARCHAR}} as expected. - the data type in {{t2_union_vv}}, {{t2_union_vn}}, {{t2_union_nv}} is {{CHAR}}, which is wrong. Note, if I replace copying of {{vchar.frm}} (the old VARCHAR) to a normal {{CREATE}} like this: {code:sql} CREATE TABLE vchar (v VARCHAR(30)); {code} and return the test, it correctly creates {{VARCHAR}} in all queries. So this problem is specific to the old {{VARCHAR}}. |
I create this test file:
{code:sql} # Copy a table with the old MySQL-4.0 VARCHAR let $MYSQLD_DATADIR= `select @@datadir`; copy_file $MYSQL_TEST_DIR/std_data/vchar.frm $MYSQLD_DATADIR/test/vchar.frm; truncate table vchar; SHOW CREATE TABLE vchar; CREATE TABLE t2_simple AS SELECT v FROM vchar; SHOW CREATE TABLE t2_simple; DROP TABLE t2_simple; CREATE TABLE t2_union_vv AS SELECT v FROM vchar UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_vv; DROP TABLE t2_union_vv; CREATE TABLE t2_union_vn AS SELECT v FROM vchar UNION SELECT NULL; SHOW CREATE TABLE t2_union_vn; DROP TABLE t2_union_vn; CREATE TABLE t2_union_nv AS SELECT NULL AS v UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_nv; DROP TABLE t2_union_nv; DROP TABLE vchar; {code} Now I run this test and it produces the following output: {noformat} truncate table vchar; SHOW CREATE TABLE vchar; Table Create Table vchar CREATE TABLE `vchar` ( `v` varchar(30) DEFAULT NULL, `c` char(3) DEFAULT NULL, `e` enum('abc','def','ghi') DEFAULT NULL, `t` text DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 CREATE TABLE t2_simple AS SELECT v FROM vchar; SHOW CREATE TABLE t2_simple; Table Create Table t2_simple CREATE TABLE `t2_simple` ( `v` varchar(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_simple; CREATE TABLE t2_union_vv AS SELECT v FROM vchar UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_vv; Table Create Table t2_union_vv CREATE TABLE `t2_union_vv` ( `v` char(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_union_vv; CREATE TABLE t2_union_vn AS SELECT v FROM vchar UNION SELECT NULL; SHOW CREATE TABLE t2_union_vn; Table Create Table t2_union_vn CREATE TABLE `t2_union_vn` ( `v` char(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_union_vn; CREATE TABLE t2_union_nv AS SELECT NULL AS v UNION SELECT v FROM vchar; SHOW CREATE TABLE t2_union_nv; Table Create Table t2_union_nv CREATE TABLE `t2_union_nv` ( `v` char(30) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t2_union_nv; DROP TABLE vchar; {noformat} Notice: - the data type in {{t2_simple}} is {{VARCHAR}} as expected. - the data type in {{t2_union_vv}}, {{t2_union_vn}}, {{t2_union_nv}} is {{CHAR}}, which is wrong. Note, if I replace copying of {{vchar.frm}} (the old VARCHAR) to a normal {{CREATE}} like this: {code:sql} CREATE TABLE vchar (v VARCHAR(30)); {code} and return the test, it correctly creates {{VARCHAR}} in all queries. So this problem is specific to the old {{VARCHAR}}. |
Epic Link | MDEV-21071 [ 80504 ] |
Workflow | MariaDB v3 [ 87550 ] | MariaDB v4 [ 140802 ] |