### test creating index with data contains null field set @save_sql_mode=@@sql_mode; ========================================================== # case 1 with hidden primary key ========================================================== # case 1.1 on INT column ========================================================== CREATE TABLE t1(id INT, a INT); INSERT INTO t1 VALUES(1, 1), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 1 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY. ALTER TABLE t1 ADD PRIMARY KEY(a); ERROR 23000: Duplicate entry '0' for key 'PRIMARY' SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `a` int(11) DEFAULT NULL, UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT, a INT); INSERT INTO t1 VALUES(1, 1), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 1 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 ADD PRIMARY KEY(a); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `a` int(11) DEFAULT NULL, UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT, a INT); INSERT INTO t1 VALUES(1, 1), (2, NULL); SELECT * FROM t1; id a 1 1 2 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 ADD PRIMARY KEY(a); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `a` int(11) DEFAULT NULL, UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; ========================================================== # case 1.2 on CHAR COLUMN ========================================================== CREATE TABLE t1(id INT, a CHAR(10)); INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 a 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY. ALTER TABLE t1 ADD PRIMARY KEY(a); ERROR 23000: Duplicate entry '' for key 'PRIMARY' SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `a` char(10) COLLATE utf8mb4_general_ci DEFAULT NULL, UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT, a CHAR(10)); INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 a 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 ADD PRIMARY KEY(a); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `a` char(10) COLLATE utf8mb4_general_ci DEFAULT NULL, UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT, a CHAR(10)); INSERT INTO t1 VALUES(1, 'a'), (2, NULL); SELECT * FROM t1; id a 1 a 2 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 ADD PRIMARY KEY(a); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `a` char(10) COLLATE utf8mb4_general_ci DEFAULT NULL, UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; ========================================================== # case 1.3 on VARCHAR COLUMN ========================================================== CREATE TABLE t1(id INT, a VARCHAR(60)); INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 a 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY. ALTER TABLE t1 ADD PRIMARY KEY(a); ERROR 23000: Duplicate entry '' for key 'PRIMARY' SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `a` varchar(60) COLLATE utf8mb4_general_ci DEFAULT NULL, UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT, a VARCHAR(60)); INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 a 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 ADD PRIMARY KEY(a); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `a` varchar(60) COLLATE utf8mb4_general_ci DEFAULT NULL, UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT, a VARCHAR(60)); INSERT INTO t1 VALUES(1, 'a'), (2, NULL); SELECT * FROM t1; id a 1 a 2 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 ADD PRIMARY KEY(a); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `a` varchar(60) COLLATE utf8mb4_general_ci DEFAULT NULL, UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; ========================================================== # case 1.4 on TEXT COLUMN ========================================================== CREATE TABLE t1(id INT, a TEXT); INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 a 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a(2)), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a(4)), ALGORITHM=INPLACE; ALTER TABLE t1 ADD PRIMARY KEY(a(10)), ALGORITHM=INPLACE; ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY. ALTER TABLE t1 ADD PRIMARY KEY(a(10)); ERROR 23000: Duplicate entry '' for key 'PRIMARY' SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `a` text COLLATE utf8mb4_general_ci, UNIQUE KEY `a_2` (`a`(4)), KEY `a` (`a`(2)) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT, a TEXT); INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 a 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a(2)), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a(4)), ALGORITHM=INPLACE; ALTER TABLE t1 ADD PRIMARY KEY(a(10)), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 ADD PRIMARY KEY(a(10)); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `a` text COLLATE utf8mb4_general_ci, UNIQUE KEY `a_2` (`a`(4)), KEY `a` (`a`(2)) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT, a TEXT); INSERT INTO t1 VALUES(1, 'a'), (2, NULL); SELECT * FROM t1; id a 1 a 2 NULL ALTER TABLE t1 ADD KEY(a(2)), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a(4)), ALGORITHM=INPLACE; ALTER TABLE t1 ADD PRIMARY KEY(a(10)), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 ADD PRIMARY KEY(a(10)); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `a` text COLLATE utf8mb4_general_ci, UNIQUE KEY `a_2` (`a`(4)), KEY `a` (`a`(2)) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; ========================================================== # case 2 with primary key ========================================================== # case 2.1 on INT column ========================================================== CREATE TABLE t1(id INT PRIMARY KEY, a INT); INSERT INTO t1 VALUES(1, 1), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 1 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY. ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a); ERROR 23000: Duplicate entry '0' for key 'PRIMARY' SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT PRIMARY KEY, a INT); INSERT INTO t1 VALUES(1, 1), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 1 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT PRIMARY KEY, a INT); INSERT INTO t1 VALUES(1, 1), (2, NULL); SELECT * FROM t1; id a 1 1 2 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; ========================================================== # case 2.2 on CHAR column ========================================================== CREATE TABLE t1(id INT PRIMARY KEY, a CHAR(10)); INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 a 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY. ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a); ERROR 23000: Duplicate entry '' for key 'PRIMARY' SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `a` char(10) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT PRIMARY KEY, a CHAR(10)); INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 a 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `a` char(10) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT PRIMARY KEY, a CHAR(10)); INSERT INTO t1 VALUES(1, 'a'), (2, NULL); SELECT * FROM t1; id a 1 a 2 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `a` char(10) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; ========================================================== # case 2.3 on VARCHAR column ========================================================== CREATE TABLE t1(id INT PRIMARY KEY, a VARCHAR(60)); INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 a 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY. ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a); ERROR 23000: Duplicate entry '' for key 'PRIMARY' SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `a` varchar(60) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT PRIMARY KEY, a VARCHAR(60)); INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 a 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `a` varchar(60) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT PRIMARY KEY, a VARCHAR(60)); INSERT INTO t1 VALUES(1, 'a'), (2, NULL); SELECT * FROM t1; id a 1 a 2 NULL ALTER TABLE t1 ADD KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a), ALGORITHM=INPLACE; ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `a` varchar(60) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `a_2` (`a`), KEY `a` (`a`) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; ========================================================== # case 2.4 on TEXT column ========================================================== CREATE TABLE t1(id INT PRIMARY KEY, a TEXT); INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 a 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a(2)), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a(4)), ALGORITHM=INPLACE; ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a(10)), ALGORITHM=INPLACE; ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: cannot silently convert NULL values, as required in this SQL_MODE. Try ALGORITHM=COPY. ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a(10)); ERROR 23000: Duplicate entry '' for key 'PRIMARY' SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `a` text COLLATE utf8mb4_general_ci, PRIMARY KEY (`id`), UNIQUE KEY `a_2` (`a`(4)), KEY `a` (`a`(2)) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT PRIMARY KEY, a TEXT); INSERT INTO t1 VALUES(1, 'a'), (2, NULL), (3, NULL); SELECT * FROM t1; id a 1 a 2 NULL 3 NULL ALTER TABLE t1 ADD KEY(a(2)), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a(4)), ALGORITHM=INPLACE; ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a(10)), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a(10)); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `a` text COLLATE utf8mb4_general_ci, PRIMARY KEY (`id`), UNIQUE KEY `a_2` (`a`(4)), KEY `a` (`a`(2)) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode; set sql_mode="STRICT_ALL_TABLES"; Warnings: Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. CREATE TABLE t1(id INT PRIMARY KEY, a TEXT); INSERT INTO t1 VALUES(1, 'a'), (2, NULL); SELECT * FROM t1; id a 1 a 2 NULL ALTER TABLE t1 ADD KEY(a(2)), ALGORITHM=INPLACE; ALTER TABLE t1 ADD UNIQUE KEY(a(4)), ALGORITHM=INPLACE; ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a(10)), ALGORITHM=INPLACE; ERROR 22004: Invalid use of NULL value ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(a(10)); ERROR 22004: Invalid use of NULL value SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `a` text COLLATE utf8mb4_general_ci, PRIMARY KEY (`id`), UNIQUE KEY `a_2` (`a`(4)), KEY `a` (`a`(2)) ) ENGINE=XENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; set sql_mode = @save_sql_mode;