Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.7(EOL)
-
None
Description
Tested on 10.7, probably affects lower versions.
Reproduce
set names utf8; |
let $save_debug=`select @@debug_dbug`; |
let $MYSQLD_DATADIR= `SELECT @@datadir`; |
# Filename is too long because it is converted to @274e@274e@274e@274e... |
# so each '❎' is 5 bytes in filesystem, 51 x 5 = 255 bytes |
let $t= `select repeat('❎', 51)`; |
--error ER_CANT_CREATE_TABLE
|
eval create table $t (x int); |
Result
ER_BAD_DB_ERROR is thrown, misguiding error message Unknown database 'test'
mysqltest: At line 7: query 'create table $t (x int)' failed: ER_BAD_DB_ERROR (1049): Unknown database 'test'
|
Expected
ER_CANT_CREATE_TABLE is thrown on Linux
ERROR HY000: Can't create table `test`.`❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎❎ ❎❎❎❎❎❎❎❎❎❎❎❎❎` (errno: 36 "File name too long")
|
Notes
The fork for different error codes is here:
int writefile(const char *path, const char *db, const char *table, |
bool tmp_table, const uchar *data, size_t len) |
{
|
...
|
File file= mysql_file_create(key_file_frm, path,
|
CREATE_MODE, create_flags, MYF(0));
|
|
if (unlikely((error= file < 0))) |
{
|
if (my_errno == ENOENT) |
my_error(ER_BAD_DB_ERROR, MYF(0), db);
|
else |
my_error(ER_CANT_CREATE_TABLE, MYF(0), db, table, my_errno);
|
}
|
...
|
On Windows it sets my_errno to ENOENT, on Linux it sets my_errno to 36 ("File name too long").