Bug #14139 | Incorrect CREATE TABLE (...) SELECT ... behaviour | ||
---|---|---|---|
Submitted: | 19 Oct 2005 12:16 | Modified: | 1 Nov 2005 19:42 |
Reporter: | MySQL-Front Team | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server | Severity: | S3 (Non-critical) |
Version: | 5.0.15-BK, 5.0.13-rc | OS: | Linux (Linux, Windows XP) |
Assigned to: | Sergey Petrunya | CPU Architecture: | Any |
[19 Oct 2005 12:16]
MySQL-Front Team
[19 Oct 2005 13:09]
Valeriy Kravchuk
Thank you for a bug report. I was able to repeat this weird behaviour just as you described, both on 5.0.13-rc-nt and on lates 5.0.15-BK build on Linux mysql> CREATE TABLE `test_1` ( -> `name` varchar(255) NOT NULL default '', -> PRIMARY KEY (`name`) -> ) DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.06 sec) mysql> CREATE TABLE `test_2` ( -> `name` varchar(255) NOT NULL default '', -> PRIMARY KEY (`name`) -> ) DEFAULT CHARSET=utf8 SELECT * FROM `test_1`; ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes Let's try without that PRIMARY KEY: mysql> desc test_1; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | name | varchar(255) | NO | PRI | | | +-------+--------------+------+-----+---------+-------+ 1 row in set (0.00 sec) mysql> CREATE TABLE `test_2` (`name` varchar(255) NOT NULL default '') DEFAULT CHARSET=utf8 SELECT * FROM `test_1`; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc test_2; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | name | varchar(765) | NO | | | | +-------+--------------+------+-----+---------+-------+ 1 row in set (0.00 sec) Where that 765 (=255*3) came from? And even if it is 765, then where that error message came from in the previous attempt to create test_2? Nothing similar is described in http://dev.mysql.com/doc/refman/5.0/en/create-table.html...
[19 Oct 2005 21:43]
Jeremy Cole
This also seems to be true on 4.1.14. For a simple test case: Works: DROP TABLE IF EXISTS t; CREATE TABLE t (a VARCHAR(111) CHARSET utf8 COLLATE utf8_bin NOT NULL, PRIMARY KEY (a)) SELECT 'test' AS a; Query OK, 1 row affected (0.01 sec) Records: 1 Duplicates: 0 Warnings: 0 Doesn't: DROP TABLE IF EXISTS t; CREATE TABLE t (a VARCHAR(112) CHARSET utf8 COLLATE utf8_bin NOT NULL, PRIMARY KEY (a)) SELECT 'test' AS a; ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes This only seems to be a bug with INSERT ... SELECT ...; the following works fine: DROP TABLE IF EXISTS t; CREATE TABLE t (a VARCHAR(112) CHARSET utf8 COLLATE utf8_bin NOT NULL, PRIMARY KEY (a)); Query OK, 0 rows affected (0.00 sec)
[25 Oct 2005 20:51]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/31470
[28 Oct 2005 18:17]
Sergey Petrunya
Fix pushed into 4.1.16 tree.
[28 Oct 2005 18:23]
Sergey Petrunya
Notes for the changelog: For queries in form "CREATE TABLE (... columnX char(N) ... ) SELECT .... ", MySQL would try to create a table with not columnX(N), but with columnX ( N * {max_chararcter_length_of_column_charset}) column instead. If columnX is used in a key of a new table, this could cause an unexpected "Specified key was too long" error.
[31 Oct 2005 6:17]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/31668
[1 Nov 2005 19:42]
Paul DuBois
Noted in 4.1.16, 5.0.16 changelogs.