Description:
Cannot create partition with name '1e3fRQM2GhI'.
More seriously, adding a partition named '1e3fRQM2GhI' using the Alter statement in MySQL 5.7 will cause the table to be unable to be opened or dropped later.
How to repeat:
this SQL will fail in MySQL5.7 and MySQL8.0
CREATE TABLE `ep_xxx` (
`id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`status` varchar(255) NOT NULL,
`tenant_id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`created_date` datetime NOT NULL,
`project_id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
PRIMARY KEY (`id`,`project_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC
PARTITION BY LIST COLUMNS(project_id) (
PARTITION `1HkZbSJOALI` VALUES IN ('1HkZbSJOALI') ENGINE = InnoDB,
PARTITION `1cUPlKUTy1R` VALUES IN ('1cUPlKUTy1R') ENGINE = InnoDB
);
this SQL will fail in MySQL 8.0 and will cause the table to be unable to be opened in MySQL5.7.
CREATE TABLE `ep_xxxx` ( `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, `status` varchar(255) NOT NULL, `tenant_id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, `created_date` datetime NOT NULL, `project_id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, PRIMARY KEY (`id`,`project_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC PARTITION BY LIST COLUMNS(project_id) (PARTITION `1HkZbSJOALI` VALUES IN ('1HkZbSJOALI') ENGINE = InnoDB, PARTITION `1cUPlKUTy1R` VALUES IN ('1cUPlKUTy1R') ENGINE = InnoDB);
ALTER TABLE `ep_xxxx` ADD PARTITION (PARTITION `1e3fRQM2GhI` VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB);
Suggested fix:
1. All partition names should be enclosed in backticks.
2. There exists a bug in function `require_quotes`. This function does not return non-zero even if the parser cannot correctly parse an identifier.