Bug #118476 Unable to create partition with name '1e3fRQM2GhI'
Submitted: 18 Jun 8:45 Modified: 18 Jun 9:01
Reporter: 李 屹荣 Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: DDL Severity:S2 (Serious)
Version:8.0, 8.4 OS:Red Hat
Assigned to: CPU Architecture:x86

[18 Jun 8:45] 李 屹荣
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.
[18 Jun 9:01] MySQL Verification Team
Hello!

Thank you for the report and feedback.

regards,
Umesh