Commit c59d6395 authored by Alexander Barkov's avatar Alexander Barkov

A joint patch for MDEV-19284 and MDEV-19285 (INSTANT ALTER)

This patch fixes:

- MDEV-19284 INSTANT ALTER with ucs2-to-utf16 conversion produces bad data
- MDEV-19285 INSTANT ALTER from ascii_general_ci to latin1_general_ci produces corrupt data

These regressions were introduced in 10.4.3 by:
- MDEV-15564 Avoid table rebuild in ALTER TABLE on collation or charset changes

Changes:

1. Cleanup: Adding a helper method
   Field_longstr::csinfo_change_allows_instant_alter(),
   to remove some duplicate code in field.cc.

2. Cleanup: removing Type_handler::Charsets_are_compatible() and static
   function charsets_are_compatible() and
   introducing new methods in the recently added class Charset instead:
   - encoding_allows_reinterpret_as()
   - encoding_and_order_allow_reinterpret_as()

3. Bug fix: Removing the code that allowed instant conversion for
   ascii-to->8bit and ucs2-to->utf16.
   This actually fixes MDEV-19284 and MDEV-19285.

4. Bug fix: Adding a helper method Charset::collation_specific_name().
   The old corresponding code in Type_handler::Charsets_are_compatible()
   was not safe against (badly named) user-defined collations whose
   character set name can be longer than collation name.
parent 9aa80fcf
--- instant_alter_charset.result --- instant_alter_charset.result 2019-04-23 17:42:23.324326518 +0400
+++ instant_alter_charset,redundant.result +++ instant_alter_charset,redundant.result 2019-04-23 17:42:46.047531591 +0400
@@ -254,7 +254,6 @@ @@ -279,7 +279,6 @@
alter table boundary_255 alter table boundary_255
modify b varchar(200) charset utf8mb3, modify a varchar(70) charset utf8mb4,
algorithm=instant; algorithm=instant;
-ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table boundary_255 drop table boundary_255;
modify c varchar(300) charset utf8mb3, create table fully_compatible (
algorithm=instant; id int auto_increment unique key,
...@@ -21,6 +21,10 @@ algorithm=inplace; ...@@ -21,6 +21,10 @@ algorithm=inplace;
alter table rebuild alter table rebuild
change a a varchar(150) charset latin1 not null default 'asdf', change a a varchar(150) charset latin1 not null default 'asdf',
algorithm=inplace; algorithm=inplace;
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table rebuild
change a a varchar(150) charset latin1 not null default 'asdf',
algorithm=copy;
select name, prtype, len from information_schema.innodb_sys_columns select name, prtype, len from information_schema.innodb_sys_columns
where table_id = @id; where table_id = @id;
name prtype len name prtype len
...@@ -40,7 +44,7 @@ e mediumtext charset ascii, ...@@ -40,7 +44,7 @@ e mediumtext charset ascii,
f longtext charset ascii f longtext charset ascii
) engine=innodb; ) engine=innodb;
alter table supported_types alter table supported_types
convert to charset latin1, convert to charset ascii collate ascii_bin,
algorithm=instant; algorithm=instant;
drop table supported_types; drop table supported_types;
create table various_cases ( create table various_cases (
...@@ -49,7 +53,7 @@ b varchar(150) as (a) virtual, ...@@ -49,7 +53,7 @@ b varchar(150) as (a) virtual,
c varchar(150) as (a) persistent c varchar(150) as (a) persistent
) engine=innodb; ) engine=innodb;
alter table various_cases alter table various_cases
change a a char(150) charset latin1, change a a char(150) charset ascii collate ascii_bin,
algorithm=inplace; algorithm=inplace;
alter table various_cases alter table various_cases
change a a varchar(222), change a a varchar(222),
...@@ -75,7 +79,7 @@ d longtext charset ascii, ...@@ -75,7 +79,7 @@ d longtext charset ascii,
footer int footer int
) engine=innodb; ) engine=innodb;
alter table all_texts alter table all_texts
convert to charset latin1 collate latin1_general_ci, convert to charset ascii collate ascii_bin,
algorithm=instant; algorithm=instant;
drop table all_texts; drop table all_texts;
create table all_binaries ( create table all_binaries (
...@@ -217,6 +221,11 @@ alter table latin1_swedish_special_case ...@@ -217,6 +221,11 @@ alter table latin1_swedish_special_case
modify instant1 varchar(150) charset latin1 collate latin1_swedish_ci, modify instant1 varchar(150) charset latin1 collate latin1_swedish_ci,
modify instant2 char(150) charset latin1 collate latin1_swedish_ci, modify instant2 char(150) charset latin1 collate latin1_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table latin1_swedish_special_case
modify instant1 varchar(150) charset latin1 collate latin1_swedish_ci,
modify instant2 char(150) charset latin1 collate latin1_swedish_ci,
algorithm=copy;
select c.name, c.prtype, c.mtype, c.len from information_schema.innodb_sys_columns as c inner join information_schema.innodb_sys_tables t on c.table_id = t.table_id select c.name, c.prtype, c.mtype, c.len from information_schema.innodb_sys_columns as c inner join information_schema.innodb_sys_tables t on c.table_id = t.table_id
where t.name = 'test/latin1_swedish_special_case'; where t.name = 'test/latin1_swedish_special_case';
name prtype mtype len name prtype mtype len
...@@ -251,6 +260,10 @@ c varchar(300) charset ascii ...@@ -251,6 +260,10 @@ c varchar(300) charset ascii
alter table boundary_255 alter table boundary_255
modify a varchar(50) charset utf8mb3, modify a varchar(50) charset utf8mb3,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table boundary_255
modify a varchar(50) charset utf8mb3,
algorithm=copy;
alter table boundary_255 alter table boundary_255
modify b varchar(200) charset utf8mb3, modify b varchar(200) charset utf8mb3,
algorithm=instant; algorithm=instant;
...@@ -258,6 +271,15 @@ ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column ty ...@@ -258,6 +271,15 @@ ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column ty
alter table boundary_255 alter table boundary_255
modify c varchar(300) charset utf8mb3, modify c varchar(300) charset utf8mb3,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table boundary_255;
create table boundary_255 (
a varchar(70) charset utf8mb3
) engine=innodb;
alter table boundary_255
modify a varchar(70) charset utf8mb4,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table boundary_255; drop table boundary_255;
create table fully_compatible ( create table fully_compatible (
id int auto_increment unique key, id int auto_increment unique key,
...@@ -299,28 +321,7 @@ insert into fully_compatible (from_charset, from_collate, to_charset, to_collate ...@@ -299,28 +321,7 @@ insert into fully_compatible (from_charset, from_collate, to_charset, to_collate
('utf8mb3', 'utf8mb3_general_nopad_ci', 'utf8mb4', 'utf8mb4_general_nopad_ci'), ('utf8mb3', 'utf8mb3_general_nopad_ci', 'utf8mb4', 'utf8mb4_general_nopad_ci'),
('utf8mb3', 'utf8mb3_nopad_bin', 'utf8mb4', 'utf8mb4_nopad_bin'), ('utf8mb3', 'utf8mb3_nopad_bin', 'utf8mb4', 'utf8mb4_nopad_bin'),
('utf8mb3', 'utf8mb3_unicode_nopad_ci', 'utf8mb4', 'utf8mb4_unicode_nopad_ci'), ('utf8mb3', 'utf8mb3_unicode_nopad_ci', 'utf8mb4', 'utf8mb4_unicode_nopad_ci'),
('utf8mb3', 'utf8mb3_unicode_520_nopad_ci', 'utf8mb4', 'utf8mb4_unicode_520_nopad_ci'), ('utf8mb3', 'utf8mb3_unicode_520_nopad_ci', 'utf8mb4', 'utf8mb4_unicode_520_nopad_ci')
('ucs2', 'ucs2_general_ci', 'utf16', 'utf16_general_ci'),
('ucs2', 'ucs2_unicode_ci', 'utf16', 'utf16_unicode_ci'),
('ucs2', 'ucs2_icelandic_ci', 'utf16', 'utf16_icelandic_ci'),
('ucs2', 'ucs2_latvian_ci', 'utf16', 'utf16_latvian_ci'),
('ucs2', 'ucs2_romanian_ci', 'utf16', 'utf16_romanian_ci'),
('ucs2', 'ucs2_slovenian_ci', 'utf16', 'utf16_slovenian_ci'),
('ucs2', 'ucs2_polish_ci', 'utf16', 'utf16_polish_ci'),
('ucs2', 'ucs2_estonian_ci', 'utf16', 'utf16_estonian_ci'),
('ucs2', 'ucs2_spanish_ci', 'utf16', 'utf16_spanish_ci'),
('ucs2', 'ucs2_general_ci', 'utf16', 'utf16_general_ci'),
('ascii', 'ascii_general_ci', 'utf8mb3', 'utf8mb3_general_ci'),
('ascii', 'ascii_general_ci', 'utf8mb4', 'utf8mb4_general_ci'),
('ascii', 'ascii_general_ci', 'latin1', 'latin1_general_ci'),
('ascii', 'ascii_bin', 'latin1', 'latin1_bin'),
('ascii', 'ascii_nopad_bin', 'latin1', 'latin1_nopad_bin'),
('ascii', 'ascii_general_ci', 'latin2', 'latin2_general_ci'),
('ascii', 'ascii_general_ci', 'latin7', 'latin7_general_ci'),
('ascii', 'ascii_bin', 'koi8u', 'koi8u_bin'),
('ascii', 'ascii_bin', 'ujis', 'ujis_bin'),
('ascii', 'ascii_bin', 'big5', 'big5_bin'),
('ascii', 'ascii_bin', 'gbk', 'gbk_bin')
; ;
create table tmp ( create table tmp (
a varchar(50) charset utf8mb3 collate utf8mb3_general_ci, a varchar(50) charset utf8mb3 collate utf8mb3_general_ci,
...@@ -751,288 +752,234 @@ check table tmp; ...@@ -751,288 +752,234 @@ check table tmp;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.tmp check status OK test.tmp check status OK
drop table tmp; drop table tmp;
drop table fully_compatible;
create table compatible_without_index (
id int auto_increment unique key,
from_charset char(255),
from_collate char(255),
to_charset char(255),
to_collate char(255)
);
insert into compatible_without_index (from_charset, from_collate, to_charset, to_collate) values
('utf8mb3', 'utf8mb3_general_ci', 'utf8mb4', 'utf8mb4_vietnamese_ci'),
('utf8mb3', 'utf8mb3_bin', 'utf8mb4', 'utf8mb4_vietnamese_ci'),
('utf8mb3', 'utf8mb3_general_nopad_ci', 'utf8mb4', 'utf8mb4_vietnamese_ci'),
('utf8mb3', 'utf8mb3_nopad_bin', 'utf8mb4', 'utf8mb4_vietnamese_ci'),
('ascii', 'ascii_general_ci', 'ascii', 'ascii_bin'),
('utf8mb3', 'utf8mb3_roman_ci', 'utf8mb3', 'utf8mb3_lithuanian_ci'),
('utf8mb4', 'utf8mb4_thai_520_w2', 'utf8mb4', 'utf8mb4_persian_ci'),
('utf8mb3', 'utf8mb3_myanmar_ci', 'utf8mb4', 'utf8mb4_german2_ci'),
('utf8mb3', 'utf8mb3_general_ci', 'utf8mb3', 'utf8mb3_unicode_ci'),
('latin1', 'latin1_general_cs', 'latin1', 'latin1_general_ci'),
('utf16', 'utf16_general_ci', 'utf16', 'utf16_german2_ci')
;
create table tmp ( create table tmp (
a varchar(50) charset ucs2 collate ucs2_general_ci, a varchar(50) charset utf8mb3 collate utf8mb3_general_ci,
b varchar(50) charset ucs2 collate ucs2_general_ci primary key b varchar(50) charset utf8mb3 collate utf8mb3_general_ci unique key,
c varchar(50) charset utf8mb3 collate utf8mb3_general_ci primary key
) engine=innodb; ) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset utf16 collate utf16_general_ci, change a a varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
modify b varchar(50) charset utf16 collate utf16_general_ci,
algorithm=instant; algorithm=instant;
check table tmp;
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp;
create table tmp (
a varchar(50) charset ucs2 collate ucs2_unicode_ci,
b varchar(50) charset ucs2 collate ucs2_unicode_ci primary key
) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset utf16 collate utf16_unicode_ci, modify b varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
modify b varchar(50) charset utf16 collate utf16_unicode_ci,
algorithm=instant; algorithm=instant;
check table tmp; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp;
create table tmp (
a varchar(50) charset ucs2 collate ucs2_icelandic_ci,
b varchar(50) charset ucs2 collate ucs2_icelandic_ci primary key
) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset utf16 collate utf16_icelandic_ci, modify c varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
modify b varchar(50) charset utf16 collate utf16_icelandic_ci,
algorithm=instant; algorithm=instant;
check table tmp; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ucs2 collate ucs2_latvian_ci, a varchar(50) charset utf8mb3 collate utf8mb3_bin,
b varchar(50) charset ucs2 collate ucs2_latvian_ci primary key b varchar(50) charset utf8mb3 collate utf8mb3_bin unique key,
c varchar(50) charset utf8mb3 collate utf8mb3_bin primary key
) engine=innodb; ) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset utf16 collate utf16_latvian_ci, change a a varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
modify b varchar(50) charset utf16 collate utf16_latvian_ci,
algorithm=instant; algorithm=instant;
check table tmp;
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp;
create table tmp (
a varchar(50) charset ucs2 collate ucs2_romanian_ci,
b varchar(50) charset ucs2 collate ucs2_romanian_ci primary key
) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset utf16 collate utf16_romanian_ci, modify b varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
modify b varchar(50) charset utf16 collate utf16_romanian_ci,
algorithm=instant; algorithm=instant;
check table tmp; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp;
create table tmp (
a varchar(50) charset ucs2 collate ucs2_slovenian_ci,
b varchar(50) charset ucs2 collate ucs2_slovenian_ci primary key
) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset utf16 collate utf16_slovenian_ci, modify c varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
modify b varchar(50) charset utf16 collate utf16_slovenian_ci,
algorithm=instant; algorithm=instant;
check table tmp; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ucs2 collate ucs2_polish_ci, a varchar(50) charset utf8mb3 collate utf8mb3_general_nopad_ci,
b varchar(50) charset ucs2 collate ucs2_polish_ci primary key b varchar(50) charset utf8mb3 collate utf8mb3_general_nopad_ci unique key,
c varchar(50) charset utf8mb3 collate utf8mb3_general_nopad_ci primary key
) engine=innodb; ) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset utf16 collate utf16_polish_ci, change a a varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
modify b varchar(50) charset utf16 collate utf16_polish_ci,
algorithm=instant; algorithm=instant;
check table tmp;
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp;
create table tmp (
a varchar(50) charset ucs2 collate ucs2_estonian_ci,
b varchar(50) charset ucs2 collate ucs2_estonian_ci primary key
) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset utf16 collate utf16_estonian_ci, modify b varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
modify b varchar(50) charset utf16 collate utf16_estonian_ci,
algorithm=instant; algorithm=instant;
check table tmp; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp;
create table tmp (
a varchar(50) charset ucs2 collate ucs2_spanish_ci,
b varchar(50) charset ucs2 collate ucs2_spanish_ci primary key
) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset utf16 collate utf16_spanish_ci, modify c varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
modify b varchar(50) charset utf16 collate utf16_spanish_ci,
algorithm=instant; algorithm=instant;
check table tmp; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ucs2 collate ucs2_general_ci, a varchar(50) charset utf8mb3 collate utf8mb3_nopad_bin,
b varchar(50) charset ucs2 collate ucs2_general_ci primary key b varchar(50) charset utf8mb3 collate utf8mb3_nopad_bin unique key,
c varchar(50) charset utf8mb3 collate utf8mb3_nopad_bin primary key
) engine=innodb; ) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset utf16 collate utf16_general_ci, change a a varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
modify b varchar(50) charset utf16 collate utf16_general_ci,
algorithm=instant; algorithm=instant;
check table tmp;
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp;
create table tmp (
a varchar(50) charset ascii collate ascii_general_ci,
b varchar(50) charset ascii collate ascii_general_ci primary key
) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb3 collate utf8mb3_general_ci, modify b varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
modify b varchar(50) charset utf8mb3 collate utf8mb3_general_ci,
algorithm=instant; algorithm=instant;
check table tmp; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp;
create table tmp (
a varchar(50) charset ascii collate ascii_general_ci,
b varchar(50) charset ascii collate ascii_general_ci primary key
) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb4 collate utf8mb4_general_ci, modify c varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
modify b varchar(50) charset utf8mb4 collate utf8mb4_general_ci,
algorithm=instant; algorithm=instant;
check table tmp; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_ci, a varchar(50) charset ascii collate ascii_general_ci,
b varchar(50) charset ascii collate ascii_general_ci primary key b varchar(50) charset ascii collate ascii_general_ci unique key,
c varchar(50) charset ascii collate ascii_general_ci primary key
) engine=innodb; ) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset latin1 collate latin1_general_ci, change a a varchar(50) charset ascii collate ascii_bin,
modify b varchar(50) charset latin1 collate latin1_general_ci,
algorithm=instant; algorithm=instant;
check table tmp;
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp;
create table tmp (
a varchar(50) charset ascii collate ascii_bin,
b varchar(50) charset ascii collate ascii_bin primary key
) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset latin1 collate latin1_bin, modify b varchar(50) charset ascii collate ascii_bin,
modify b varchar(50) charset latin1 collate latin1_bin,
algorithm=instant; algorithm=instant;
check table tmp; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp;
create table tmp (
a varchar(50) charset ascii collate ascii_nopad_bin,
b varchar(50) charset ascii collate ascii_nopad_bin primary key
) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset latin1 collate latin1_nopad_bin, modify c varchar(50) charset ascii collate ascii_bin,
modify b varchar(50) charset latin1 collate latin1_nopad_bin,
algorithm=instant; algorithm=instant;
check table tmp; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_ci, a varchar(50) charset utf8mb3 collate utf8mb3_roman_ci,
b varchar(50) charset ascii collate ascii_general_ci primary key b varchar(50) charset utf8mb3 collate utf8mb3_roman_ci unique key,
c varchar(50) charset utf8mb3 collate utf8mb3_roman_ci primary key
) engine=innodb; ) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset latin2 collate latin2_general_ci, change a a varchar(50) charset utf8mb3 collate utf8mb3_lithuanian_ci,
modify b varchar(50) charset latin2 collate latin2_general_ci, algorithm=instant;
alter table tmp
modify b varchar(50) charset utf8mb3 collate utf8mb3_lithuanian_ci,
algorithm=instant; algorithm=instant;
check table tmp; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp;
create table tmp (
a varchar(50) charset ascii collate ascii_general_ci,
b varchar(50) charset ascii collate ascii_general_ci primary key
) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset latin7 collate latin7_general_ci, modify c varchar(50) charset utf8mb3 collate utf8mb3_lithuanian_ci,
modify b varchar(50) charset latin7 collate latin7_general_ci,
algorithm=instant; algorithm=instant;
check table tmp; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_bin, a varchar(50) charset utf8mb4 collate utf8mb4_thai_520_w2,
b varchar(50) charset ascii collate ascii_bin primary key b varchar(50) charset utf8mb4 collate utf8mb4_thai_520_w2 unique key,
c varchar(50) charset utf8mb4 collate utf8mb4_thai_520_w2 primary key
) engine=innodb; ) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset koi8u collate koi8u_bin, change a a varchar(50) charset utf8mb4 collate utf8mb4_persian_ci,
modify b varchar(50) charset koi8u collate koi8u_bin,
algorithm=instant; algorithm=instant;
check table tmp;
Table Op Msg_type Msg_text
test.tmp check status OK
drop table tmp;
create table tmp (
a varchar(50) charset ascii collate ascii_bin,
b varchar(50) charset ascii collate ascii_bin primary key
) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset ujis collate ujis_bin, modify b varchar(50) charset utf8mb4 collate utf8mb4_persian_ci,
modify b varchar(50) charset ujis collate ujis_bin,
algorithm=instant; algorithm=instant;
check table tmp; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
Table Op Msg_type Msg_text alter table tmp
test.tmp check status OK modify c varchar(50) charset utf8mb4 collate utf8mb4_persian_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_bin, a varchar(50) charset utf8mb3 collate utf8mb3_myanmar_ci,
b varchar(50) charset ascii collate ascii_bin primary key b varchar(50) charset utf8mb3 collate utf8mb3_myanmar_ci unique key,
c varchar(50) charset utf8mb3 collate utf8mb3_myanmar_ci primary key
) engine=innodb; ) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset big5 collate big5_bin, change a a varchar(50) charset utf8mb4 collate utf8mb4_german2_ci,
modify b varchar(50) charset big5 collate big5_bin,
algorithm=instant; algorithm=instant;
check table tmp; alter table tmp
Table Op Msg_type Msg_text modify b varchar(50) charset utf8mb4 collate utf8mb4_german2_ci,
test.tmp check status OK algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp
modify c varchar(50) charset utf8mb4 collate utf8mb4_german2_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_bin, a varchar(50) charset utf8mb3 collate utf8mb3_general_ci,
b varchar(50) charset ascii collate ascii_bin primary key b varchar(50) charset utf8mb3 collate utf8mb3_general_ci unique key,
c varchar(50) charset utf8mb3 collate utf8mb3_general_ci primary key
) engine=innodb; ) engine=innodb;
insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');
alter table tmp alter table tmp
change a a varchar(50) charset gbk collate gbk_bin, change a a varchar(50) charset utf8mb3 collate utf8mb3_unicode_ci,
modify b varchar(50) charset gbk collate gbk_bin,
algorithm=instant; algorithm=instant;
check table tmp; alter table tmp
Table Op Msg_type Msg_text modify b varchar(50) charset utf8mb3 collate utf8mb3_unicode_ci,
test.tmp check status OK algorithm=instant;
drop table tmp; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table fully_compatible; alter table tmp
create table compatible_without_index ( modify c varchar(50) charset utf8mb3 collate utf8mb3_unicode_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp;
create table tmp (
a varchar(50) charset latin1 collate latin1_general_cs,
b varchar(50) charset latin1 collate latin1_general_cs unique key,
c varchar(50) charset latin1 collate latin1_general_cs primary key
) engine=innodb;
alter table tmp
change a a varchar(50) charset latin1 collate latin1_general_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset latin1 collate latin1_general_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp
modify c varchar(50) charset latin1 collate latin1_general_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp;
create table tmp (
a varchar(50) charset utf16 collate utf16_general_ci,
b varchar(50) charset utf16 collate utf16_general_ci unique key,
c varchar(50) charset utf16 collate utf16_general_ci primary key
) engine=innodb;
alter table tmp
change a a varchar(50) charset utf16 collate utf16_german2_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf16 collate utf16_german2_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp
modify c varchar(50) charset utf16 collate utf16_german2_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp;
drop table compatible_without_index;
create table fully_incompatible (
id int auto_increment unique key, id int auto_increment unique key,
from_charset char(255), from_charset char(255),
from_collate char(255), from_collate char(255),
to_charset char(255), to_charset char(255),
to_collate char(255) to_collate char(255)
); );
insert into compatible_without_index (from_charset, from_collate, to_charset, to_collate) values insert into fully_incompatible (from_charset, from_collate, to_charset, to_collate) values
('ascii', 'ascii_general_ci', 'utf8mb3', 'utf8mb3_general_ci'),
('ascii', 'ascii_general_ci', 'utf8mb4', 'utf8mb4_general_ci'),
('ascii', 'ascii_general_ci', 'latin1', 'latin1_general_ci'),
('ascii', 'ascii_bin', 'latin1', 'latin1_bin'),
('ascii', 'ascii_nopad_bin', 'latin1', 'latin1_nopad_bin'),
('ascii', 'ascii_general_ci', 'latin2', 'latin2_general_ci'),
('ascii', 'ascii_general_ci', 'latin7', 'latin7_general_ci'),
('ascii', 'ascii_bin', 'koi8u', 'koi8u_bin'),
('ascii', 'ascii_bin', 'ujis', 'ujis_bin'),
('ascii', 'ascii_bin', 'big5', 'big5_bin'),
('ascii', 'ascii_bin', 'gbk', 'gbk_bin'),
('ascii', 'ascii_general_ci', 'utf8mb3', 'utf8mb3_swedish_ci'), ('ascii', 'ascii_general_ci', 'utf8mb3', 'utf8mb3_swedish_ci'),
('ascii', 'ascii_bin', 'latin1', 'latin1_swedish_ci'), ('ascii', 'ascii_bin', 'latin1', 'latin1_swedish_ci'),
('ascii', 'ascii_general_nopad_ci', 'latin1', 'latin1_swedish_ci'), ('ascii', 'ascii_general_nopad_ci', 'latin1', 'latin1_swedish_ci'),
...@@ -1048,641 +995,665 @@ insert into compatible_without_index (from_charset, from_collate, to_charset, to ...@@ -1048,641 +995,665 @@ insert into compatible_without_index (from_charset, from_collate, to_charset, to
('ascii', 'ascii_bin', 'utf8mb4', 'utf8mb4_danish_ci'), ('ascii', 'ascii_bin', 'utf8mb4', 'utf8mb4_danish_ci'),
('ascii', 'ascii_general_nopad_ci', 'utf8mb4', 'utf8mb4_danish_ci'), ('ascii', 'ascii_general_nopad_ci', 'utf8mb4', 'utf8mb4_danish_ci'),
('ascii', 'ascii_nopad_bin', 'utf8mb4', 'utf8mb4_danish_ci'), ('ascii', 'ascii_nopad_bin', 'utf8mb4', 'utf8mb4_danish_ci'),
('utf8mb3', 'utf8mb3_general_ci', 'utf8mb4', 'utf8mb4_vietnamese_ci'), ('ascii', 'ascii_general_ci', 'gbk', 'gbk_chinese_ci'),
('utf8mb3', 'utf8mb3_bin', 'utf8mb4', 'utf8mb4_vietnamese_ci'), ('ascii', 'ascii_general_ci', 'gbk', 'gbk_chinese_nopad_ci'),
('utf8mb3', 'utf8mb3_general_nopad_ci', 'utf8mb4', 'utf8mb4_vietnamese_ci'), ('ascii', 'ascii_general_ci', 'ujis', 'ujis_japanese_ci'),
('utf8mb3', 'utf8mb3_nopad_bin', 'utf8mb4', 'utf8mb4_vietnamese_ci'), ('ascii', 'ascii_general_ci', 'big5', 'big5_chinese_ci'),
('ascii', 'ascii_general_ci', 'gbk', 'gbk_chinese_ci'), ('ascii', 'ascii_general_ci', 'latin2', 'latin2_croatian_ci'),
('ascii', 'ascii_general_ci', 'gbk', 'gbk_chinese_nopad_ci'), ('ascii', 'ascii_general_ci', 'latin7', 'latin7_estonian_cs'),
('ucs2', 'ucs2_general_ci', 'utf16', 'utf16_general_ci'),
('ucs2', 'ucs2_unicode_ci', 'utf16', 'utf16_unicode_ci'),
('ucs2', 'ucs2_icelandic_ci', 'utf16', 'utf16_icelandic_ci'),
('ucs2', 'ucs2_latvian_ci', 'utf16', 'utf16_latvian_ci'),
('ucs2', 'ucs2_romanian_ci', 'utf16', 'utf16_romanian_ci'),
('ucs2', 'ucs2_slovenian_ci', 'utf16', 'utf16_slovenian_ci'),
('ucs2', 'ucs2_polish_ci', 'utf16', 'utf16_polish_ci'),
('ucs2', 'ucs2_estonian_ci', 'utf16', 'utf16_estonian_ci'),
('ucs2', 'ucs2_spanish_ci', 'utf16', 'utf16_spanish_ci'),
('ucs2', 'ucs2_general_ci', 'utf16', 'utf16_general_ci'),
('ucs2', 'ucs2_myanmar_ci', 'utf16', 'utf16_thai_520_w2'), ('ucs2', 'ucs2_myanmar_ci', 'utf16', 'utf16_thai_520_w2'),
('ucs2', 'ucs2_general_ci', 'utf16', 'utf16_unicode_nopad_ci'), ('ucs2', 'ucs2_general_ci', 'utf16', 'utf16_unicode_nopad_ci'),
('ucs2', 'ucs2_general_mysql500_ci', 'utf16', 'utf16_spanish2_ci'), ('ucs2', 'ucs2_general_mysql500_ci', 'utf16', 'utf16_spanish2_ci'),
('ascii', 'ascii_general_ci', 'ascii', 'ascii_bin'), ('utf8mb4', 'utf8mb4_general_ci', 'utf8mb3', 'utf8mb3_general_ci'),
('utf8mb3', 'utf8mb3_roman_ci', 'utf8mb3', 'utf8mb3_lithuanian_ci'), ('utf8mb4', 'utf8mb4_general_ci', 'ascii', 'ascii_general_ci'),
('utf8mb4', 'utf8mb4_thai_520_w2', 'utf8mb4', 'utf8mb4_persian_ci'), ('utf8mb3', 'utf8mb3_general_ci', 'ascii', 'ascii_general_ci'),
('utf8mb3', 'utf8mb3_myanmar_ci', 'utf8mb4', 'utf8mb4_german2_ci'), ('utf8mb3', 'utf8mb3_general_ci', 'latin1', 'latin1_general_ci'),
('utf8mb3', 'utf8mb3_general_ci', 'utf8mb3', 'utf8mb3_unicode_ci'), ('utf16', 'utf16_general_ci', 'utf32', 'utf32_general_ci'),
('latin1', 'latin1_general_cs', 'latin1', 'latin1_general_ci'), ('latin1', 'latin1_general_ci', 'ascii', 'ascii_general_ci'),
('ascii', 'ascii_general_ci', 'ujis', 'ujis_japanese_ci'), ('ascii', 'ascii_general_ci', 'swe7', 'swe7_swedish_ci'),
('ascii', 'ascii_general_ci', 'big5', 'big5_chinese_ci'), ('eucjpms', 'eucjpms_japanese_nopad_ci', 'geostd8', 'geostd8_general_ci'),
('ascii', 'ascii_general_ci', 'latin2', 'latin2_croatian_ci'), ('latin1', 'latin1_general_ci', 'utf16', 'utf16_general_ci')
('ascii', 'ascii_general_ci', 'latin7', 'latin7_estonian_cs'),
('utf16', 'utf16_general_ci', 'utf16', 'utf16_german2_ci')
; ;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_ci, a varchar(150) charset ascii collate ascii_general_ci,
b varchar(50) charset ascii collate ascii_general_ci unique key, b text(150) charset ascii collate ascii_general_ci,
c varchar(50) charset ascii collate ascii_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, change a a varchar(150) charset utf8mb3 collate utf8mb3_general_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, modify b text charset utf8mb3 collate utf8mb3_general_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_bin, a varchar(150) charset ascii collate ascii_general_ci,
b varchar(50) charset ascii collate ascii_bin unique key, b text(150) charset ascii collate ascii_general_ci,
c varchar(50) charset ascii collate ascii_bin primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset latin1 collate latin1_swedish_ci, change a a varchar(150) charset utf8mb4 collate utf8mb4_general_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset latin1 collate latin1_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset latin1 collate latin1_swedish_ci, modify b text charset utf8mb4 collate utf8mb4_general_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_nopad_ci, a varchar(150) charset ascii collate ascii_general_ci,
b varchar(50) charset ascii collate ascii_general_nopad_ci unique key, b text(150) charset ascii collate ascii_general_ci,
c varchar(50) charset ascii collate ascii_general_nopad_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset latin1 collate latin1_swedish_ci, change a a varchar(150) charset latin1 collate latin1_general_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset latin1 collate latin1_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset latin1 collate latin1_swedish_ci, modify b text charset latin1 collate latin1_general_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_nopad_bin, a varchar(150) charset ascii collate ascii_bin,
b varchar(50) charset ascii collate ascii_nopad_bin unique key, b text(150) charset ascii collate ascii_bin,
c varchar(50) charset ascii collate ascii_nopad_bin primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset latin1 collate latin1_swedish_ci, change a a varchar(150) charset latin1 collate latin1_bin,
algorithm=instant;
alter table tmp
modify b varchar(50) charset latin1 collate latin1_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset latin1 collate latin1_swedish_ci, modify b text charset latin1 collate latin1_bin,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_ci, a varchar(150) charset ascii collate ascii_nopad_bin,
b varchar(50) charset ascii collate ascii_general_ci unique key, b text(150) charset ascii collate ascii_nopad_bin,
c varchar(50) charset ascii collate ascii_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset koi8u collate koi8u_bin, change a a varchar(150) charset latin1 collate latin1_nopad_bin,
algorithm=instant;
alter table tmp
modify b varchar(50) charset koi8u collate koi8u_bin,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset koi8u collate koi8u_bin, modify b text charset latin1 collate latin1_nopad_bin,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_nopad_ci, a varchar(150) charset ascii collate ascii_general_ci,
b varchar(50) charset ascii collate ascii_general_nopad_ci unique key, b text(150) charset ascii collate ascii_general_ci,
c varchar(50) charset ascii collate ascii_general_nopad_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset koi8u collate koi8u_bin, change a a varchar(150) charset latin2 collate latin2_general_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset koi8u collate koi8u_bin,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset koi8u collate koi8u_bin, modify b text charset latin2 collate latin2_general_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_nopad_bin, a varchar(150) charset ascii collate ascii_general_ci,
b varchar(50) charset ascii collate ascii_nopad_bin unique key, b text(150) charset ascii collate ascii_general_ci,
c varchar(50) charset ascii collate ascii_nopad_bin primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset koi8u collate koi8u_bin, change a a varchar(150) charset latin7 collate latin7_general_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset koi8u collate koi8u_bin,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset koi8u collate koi8u_bin, modify b text charset latin7 collate latin7_general_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_ci, a varchar(150) charset ascii collate ascii_bin,
b varchar(50) charset ascii collate ascii_general_ci unique key, b text(150) charset ascii collate ascii_bin,
c varchar(50) charset ascii collate ascii_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset latin1 collate latin1_swedish_ci, change a a varchar(150) charset koi8u collate koi8u_bin,
algorithm=instant;
alter table tmp
modify b varchar(50) charset latin1 collate latin1_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset latin1 collate latin1_swedish_ci, modify b text charset koi8u collate koi8u_bin,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_bin, a varchar(150) charset ascii collate ascii_bin,
b varchar(50) charset ascii collate ascii_bin unique key, b text(150) charset ascii collate ascii_bin,
c varchar(50) charset ascii collate ascii_bin primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, change a a varchar(150) charset ujis collate ujis_bin,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, modify b text charset ujis collate ujis_bin,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_nopad_ci, a varchar(150) charset ascii collate ascii_bin,
b varchar(50) charset ascii collate ascii_general_nopad_ci unique key, b text(150) charset ascii collate ascii_bin,
c varchar(50) charset ascii collate ascii_general_nopad_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, change a a varchar(150) charset big5 collate big5_bin,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, modify b text charset big5 collate big5_bin,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_nopad_bin, a varchar(150) charset ascii collate ascii_bin,
b varchar(50) charset ascii collate ascii_nopad_bin unique key, b text(150) charset ascii collate ascii_bin,
c varchar(50) charset ascii collate ascii_nopad_bin primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, change a a varchar(150) charset gbk collate gbk_bin,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb3 collate utf8mb3_swedish_ci, modify b text charset gbk collate gbk_bin,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_ci, a varchar(150) charset ascii collate ascii_general_ci,
b varchar(50) charset ascii collate ascii_general_ci unique key, b text(150) charset ascii collate ascii_general_ci,
c varchar(50) charset ascii collate ascii_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, change a a varchar(150) charset utf8mb3 collate utf8mb3_swedish_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf8mb4 collate utf8mb4_danish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, modify b text charset utf8mb3 collate utf8mb3_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_bin, a varchar(150) charset ascii collate ascii_bin,
b varchar(50) charset ascii collate ascii_bin unique key, b text(150) charset ascii collate ascii_bin,
c varchar(50) charset ascii collate ascii_bin primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, change a a varchar(150) charset latin1 collate latin1_swedish_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf8mb4 collate utf8mb4_danish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, modify b text charset latin1 collate latin1_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_nopad_ci, a varchar(150) charset ascii collate ascii_general_nopad_ci,
b varchar(50) charset ascii collate ascii_general_nopad_ci unique key, b text(150) charset ascii collate ascii_general_nopad_ci,
c varchar(50) charset ascii collate ascii_general_nopad_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, change a a varchar(150) charset latin1 collate latin1_swedish_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf8mb4 collate utf8mb4_danish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, modify b text charset latin1 collate latin1_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_nopad_bin, a varchar(150) charset ascii collate ascii_nopad_bin,
b varchar(50) charset ascii collate ascii_nopad_bin unique key, b text(150) charset ascii collate ascii_nopad_bin,
c varchar(50) charset ascii collate ascii_nopad_bin primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, change a a varchar(150) charset latin1 collate latin1_swedish_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf8mb4 collate utf8mb4_danish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb4 collate utf8mb4_danish_ci, modify b text charset latin1 collate latin1_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset utf8mb3 collate utf8mb3_general_ci, a varchar(150) charset ascii collate ascii_general_ci,
b varchar(50) charset utf8mb3 collate utf8mb3_general_ci unique key, b text(150) charset ascii collate ascii_general_ci,
c varchar(50) charset utf8mb3 collate utf8mb3_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, change a a varchar(150) charset koi8u collate koi8u_bin,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, modify b text charset koi8u collate koi8u_bin,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset utf8mb3 collate utf8mb3_bin, a varchar(150) charset ascii collate ascii_general_nopad_ci,
b varchar(50) charset utf8mb3 collate utf8mb3_bin unique key, b text(150) charset ascii collate ascii_general_nopad_ci,
c varchar(50) charset utf8mb3 collate utf8mb3_bin primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, change a a varchar(150) charset koi8u collate koi8u_bin,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, modify b text charset koi8u collate koi8u_bin,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset utf8mb3 collate utf8mb3_general_nopad_ci, a varchar(150) charset ascii collate ascii_nopad_bin,
b varchar(50) charset utf8mb3 collate utf8mb3_general_nopad_ci unique key, b text(150) charset ascii collate ascii_nopad_bin,
c varchar(50) charset utf8mb3 collate utf8mb3_general_nopad_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, change a a varchar(150) charset koi8u collate koi8u_bin,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, modify b text charset koi8u collate koi8u_bin,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset utf8mb3 collate utf8mb3_nopad_bin, a varchar(150) charset ascii collate ascii_general_ci,
b varchar(50) charset utf8mb3 collate utf8mb3_nopad_bin unique key, b text(150) charset ascii collate ascii_general_ci,
c varchar(50) charset utf8mb3 collate utf8mb3_nopad_bin primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, change a a varchar(150) charset latin1 collate latin1_swedish_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb4 collate utf8mb4_vietnamese_ci, modify b text charset latin1 collate latin1_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_ci, a varchar(150) charset ascii collate ascii_bin,
b varchar(50) charset ascii collate ascii_general_ci unique key, b text(150) charset ascii collate ascii_bin,
c varchar(50) charset ascii collate ascii_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset gbk collate gbk_chinese_ci, change a a varchar(150) charset utf8mb3 collate utf8mb3_swedish_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset gbk collate gbk_chinese_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset gbk collate gbk_chinese_ci, modify b text charset utf8mb3 collate utf8mb3_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_ci, a varchar(150) charset ascii collate ascii_general_nopad_ci,
b varchar(50) charset ascii collate ascii_general_ci unique key, b text(150) charset ascii collate ascii_general_nopad_ci,
c varchar(50) charset ascii collate ascii_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset gbk collate gbk_chinese_nopad_ci, change a a varchar(150) charset utf8mb3 collate utf8mb3_swedish_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset gbk collate gbk_chinese_nopad_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset gbk collate gbk_chinese_nopad_ci, modify b text charset utf8mb3 collate utf8mb3_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ucs2 collate ucs2_myanmar_ci, a varchar(150) charset ascii collate ascii_nopad_bin,
b varchar(50) charset ucs2 collate ucs2_myanmar_ci unique key, b text(150) charset ascii collate ascii_nopad_bin,
c varchar(50) charset ucs2 collate ucs2_myanmar_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf16 collate utf16_thai_520_w2, change a a varchar(150) charset utf8mb3 collate utf8mb3_swedish_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf16 collate utf16_thai_520_w2,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf16 collate utf16_thai_520_w2, modify b text charset utf8mb3 collate utf8mb3_swedish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ucs2 collate ucs2_general_ci, a varchar(150) charset ascii collate ascii_general_ci,
b varchar(50) charset ucs2 collate ucs2_general_ci unique key, b text(150) charset ascii collate ascii_general_ci,
c varchar(50) charset ucs2 collate ucs2_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf16 collate utf16_unicode_nopad_ci, change a a varchar(150) charset utf8mb4 collate utf8mb4_danish_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf16 collate utf16_unicode_nopad_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf16 collate utf16_unicode_nopad_ci, modify b text charset utf8mb4 collate utf8mb4_danish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ucs2 collate ucs2_general_mysql500_ci, a varchar(150) charset ascii collate ascii_bin,
b varchar(50) charset ucs2 collate ucs2_general_mysql500_ci unique key, b text(150) charset ascii collate ascii_bin,
c varchar(50) charset ucs2 collate ucs2_general_mysql500_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf16 collate utf16_spanish2_ci, change a a varchar(150) charset utf8mb4 collate utf8mb4_danish_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset utf16 collate utf16_spanish2_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf16 collate utf16_spanish2_ci, modify b text charset utf8mb4 collate utf8mb4_danish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_ci, a varchar(150) charset ascii collate ascii_general_nopad_ci,
b varchar(50) charset ascii collate ascii_general_ci unique key, b text(150) charset ascii collate ascii_general_nopad_ci,
c varchar(50) charset ascii collate ascii_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset ascii collate ascii_bin, change a a varchar(150) charset utf8mb4 collate utf8mb4_danish_ci,
algorithm=instant;
alter table tmp
modify b varchar(50) charset ascii collate ascii_bin,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset ascii collate ascii_bin, modify b text charset utf8mb4 collate utf8mb4_danish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset utf8mb3 collate utf8mb3_roman_ci, a varchar(150) charset ascii collate ascii_nopad_bin,
b varchar(50) charset utf8mb3 collate utf8mb3_roman_ci unique key, b text(150) charset ascii collate ascii_nopad_bin,
c varchar(50) charset utf8mb3 collate utf8mb3_roman_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb3 collate utf8mb3_lithuanian_ci, change a a varchar(150) charset utf8mb4 collate utf8mb4_danish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify b varchar(50) charset utf8mb3 collate utf8mb3_lithuanian_ci, modify b text charset utf8mb4 collate utf8mb4_danish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp;
create table tmp (
a varchar(150) charset ascii collate ascii_general_ci,
b text(150) charset ascii collate ascii_general_ci,
unique key b_idx (b(150))
) engine=innodb;
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb3 collate utf8mb3_lithuanian_ci, change a a varchar(150) charset gbk collate gbk_chinese_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp
modify b text charset gbk collate gbk_chinese_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset utf8mb4 collate utf8mb4_thai_520_w2, a varchar(150) charset ascii collate ascii_general_ci,
b varchar(50) charset utf8mb4 collate utf8mb4_thai_520_w2 unique key, b text(150) charset ascii collate ascii_general_ci,
c varchar(50) charset utf8mb4 collate utf8mb4_thai_520_w2 primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb4 collate utf8mb4_persian_ci, change a a varchar(150) charset gbk collate gbk_chinese_nopad_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify b varchar(50) charset utf8mb4 collate utf8mb4_persian_ci, modify b text charset gbk collate gbk_chinese_nopad_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp;
create table tmp (
a varchar(150) charset ascii collate ascii_general_ci,
b text(150) charset ascii collate ascii_general_ci,
unique key b_idx (b(150))
) engine=innodb;
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb4 collate utf8mb4_persian_ci, change a a varchar(150) charset ujis collate ujis_japanese_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp
modify b text charset ujis collate ujis_japanese_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset utf8mb3 collate utf8mb3_myanmar_ci, a varchar(150) charset ascii collate ascii_general_ci,
b varchar(50) charset utf8mb3 collate utf8mb3_myanmar_ci unique key, b text(150) charset ascii collate ascii_general_ci,
c varchar(50) charset utf8mb3 collate utf8mb3_myanmar_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb4 collate utf8mb4_german2_ci, change a a varchar(150) charset big5 collate big5_chinese_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify b varchar(50) charset utf8mb4 collate utf8mb4_german2_ci, modify b text charset big5 collate big5_chinese_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp;
create table tmp (
a varchar(150) charset ascii collate ascii_general_ci,
b text(150) charset ascii collate ascii_general_ci,
unique key b_idx (b(150))
) engine=innodb;
alter table tmp
change a a varchar(150) charset latin2 collate latin2_croatian_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb4 collate utf8mb4_german2_ci, modify b text charset latin2 collate latin2_croatian_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset utf8mb3 collate utf8mb3_general_ci, a varchar(150) charset ascii collate ascii_general_ci,
b varchar(50) charset utf8mb3 collate utf8mb3_general_ci unique key, b text(150) charset ascii collate ascii_general_ci,
c varchar(50) charset utf8mb3 collate utf8mb3_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf8mb3 collate utf8mb3_unicode_ci, change a a varchar(150) charset latin7 collate latin7_estonian_cs,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify b varchar(50) charset utf8mb3 collate utf8mb3_unicode_ci, modify b text charset latin7 collate latin7_estonian_cs,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp;
create table tmp (
a varchar(150) charset ucs2 collate ucs2_general_ci,
b text(150) charset ucs2 collate ucs2_general_ci,
unique key b_idx (b(150))
) engine=innodb;
alter table tmp alter table tmp
modify c varchar(50) charset utf8mb3 collate utf8mb3_unicode_ci, change a a varchar(150) charset utf16 collate utf16_general_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp
modify b text charset utf16 collate utf16_general_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset latin1 collate latin1_general_cs, a varchar(150) charset ucs2 collate ucs2_unicode_ci,
b varchar(50) charset latin1 collate latin1_general_cs unique key, b text(150) charset ucs2 collate ucs2_unicode_ci,
c varchar(50) charset latin1 collate latin1_general_cs primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset latin1 collate latin1_general_ci, change a a varchar(150) charset utf16 collate utf16_unicode_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify b varchar(50) charset latin1 collate latin1_general_ci, modify b text charset utf16 collate utf16_unicode_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp;
create table tmp (
a varchar(150) charset ucs2 collate ucs2_icelandic_ci,
b text(150) charset ucs2 collate ucs2_icelandic_ci,
unique key b_idx (b(150))
) engine=innodb;
alter table tmp
change a a varchar(150) charset utf16 collate utf16_icelandic_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset latin1 collate latin1_general_ci, modify b text charset utf16 collate utf16_icelandic_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_ci, a varchar(150) charset ucs2 collate ucs2_latvian_ci,
b varchar(50) charset ascii collate ascii_general_ci unique key, b text(150) charset ucs2 collate ucs2_latvian_ci,
c varchar(50) charset ascii collate ascii_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset ujis collate ujis_japanese_ci, change a a varchar(150) charset utf16 collate utf16_latvian_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify b varchar(50) charset ujis collate ujis_japanese_ci, modify b text charset utf16 collate utf16_latvian_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp;
create table tmp (
a varchar(150) charset ucs2 collate ucs2_romanian_ci,
b text(150) charset ucs2 collate ucs2_romanian_ci,
unique key b_idx (b(150))
) engine=innodb;
alter table tmp alter table tmp
modify c varchar(50) charset ujis collate ujis_japanese_ci, change a a varchar(150) charset utf16 collate utf16_romanian_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp
modify b text charset utf16 collate utf16_romanian_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_ci, a varchar(150) charset ucs2 collate ucs2_slovenian_ci,
b varchar(50) charset ascii collate ascii_general_ci unique key, b text(150) charset ucs2 collate ucs2_slovenian_ci,
c varchar(50) charset ascii collate ascii_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset big5 collate big5_chinese_ci, change a a varchar(150) charset utf16 collate utf16_slovenian_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify b varchar(50) charset big5 collate big5_chinese_ci, modify b text charset utf16 collate utf16_slovenian_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp;
create table tmp (
a varchar(150) charset ucs2 collate ucs2_polish_ci,
b text(150) charset ucs2 collate ucs2_polish_ci,
unique key b_idx (b(150))
) engine=innodb;
alter table tmp alter table tmp
modify c varchar(50) charset big5 collate big5_chinese_ci, change a a varchar(150) charset utf16 collate utf16_polish_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp
modify b text charset utf16 collate utf16_polish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_ci, a varchar(150) charset ucs2 collate ucs2_estonian_ci,
b varchar(50) charset ascii collate ascii_general_ci unique key, b text(150) charset ucs2 collate ucs2_estonian_ci,
c varchar(50) charset ascii collate ascii_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset latin2 collate latin2_croatian_ci, change a a varchar(150) charset utf16 collate utf16_estonian_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify b varchar(50) charset latin2 collate latin2_croatian_ci, modify b text charset utf16 collate utf16_estonian_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp;
create table tmp (
a varchar(150) charset ucs2 collate ucs2_spanish_ci,
b text(150) charset ucs2 collate ucs2_spanish_ci,
unique key b_idx (b(150))
) engine=innodb;
alter table tmp alter table tmp
modify c varchar(50) charset latin2 collate latin2_croatian_ci, change a a varchar(150) charset utf16 collate utf16_spanish_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp
modify b text charset utf16 collate utf16_spanish_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset ascii collate ascii_general_ci, a varchar(150) charset ucs2 collate ucs2_general_ci,
b varchar(50) charset ascii collate ascii_general_ci unique key, b text(150) charset ucs2 collate ucs2_general_ci,
c varchar(50) charset ascii collate ascii_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset latin7 collate latin7_estonian_cs, change a a varchar(150) charset utf16 collate utf16_general_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify b varchar(50) charset latin7 collate latin7_estonian_cs, modify b text charset utf16 collate utf16_general_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp;
create table tmp (
a varchar(150) charset ucs2 collate ucs2_myanmar_ci,
b text(150) charset ucs2 collate ucs2_myanmar_ci,
unique key b_idx (b(150))
) engine=innodb;
alter table tmp alter table tmp
modify c varchar(50) charset latin7 collate latin7_estonian_cs, change a a varchar(150) charset utf16 collate utf16_thai_520_w2,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp
modify b text charset utf16 collate utf16_thai_520_w2,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
create table tmp ( create table tmp (
a varchar(50) charset utf16 collate utf16_general_ci, a varchar(150) charset ucs2 collate ucs2_general_ci,
b varchar(50) charset utf16 collate utf16_general_ci unique key, b text(150) charset ucs2 collate ucs2_general_ci,
c varchar(50) charset utf16 collate utf16_general_ci primary key unique key b_idx (b(150))
) engine=innodb; ) engine=innodb;
alter table tmp alter table tmp
change a a varchar(50) charset utf16 collate utf16_german2_ci, change a a varchar(150) charset utf16 collate utf16_unicode_nopad_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify b varchar(50) charset utf16 collate utf16_german2_ci, modify b text charset utf16 collate utf16_unicode_nopad_ci,
algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp;
create table tmp (
a varchar(150) charset ucs2 collate ucs2_general_mysql500_ci,
b text(150) charset ucs2 collate ucs2_general_mysql500_ci,
unique key b_idx (b(150))
) engine=innodb;
alter table tmp
change a a varchar(150) charset utf16 collate utf16_spanish2_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
alter table tmp alter table tmp
modify c varchar(50) charset utf16 collate utf16_german2_ci, modify b text charset utf16 collate utf16_spanish2_ci,
algorithm=instant; algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
drop table compatible_without_index;
create table fully_incompatible (
id int auto_increment unique key,
from_charset char(255),
from_collate char(255),
to_charset char(255),
to_collate char(255)
);
insert into fully_incompatible (from_charset, from_collate, to_charset, to_collate) values
('utf8mb4', 'utf8mb4_general_ci', 'utf8mb3', 'utf8mb3_general_ci'),
('utf8mb4', 'utf8mb4_general_ci', 'ascii', 'ascii_general_ci'),
('utf8mb3', 'utf8mb3_general_ci', 'ascii', 'ascii_general_ci'),
('utf8mb3', 'utf8mb3_general_ci', 'latin1', 'latin1_general_ci'),
('utf16', 'utf16_general_ci', 'utf32', 'utf32_general_ci'),
('latin1', 'latin1_general_ci', 'ascii', 'ascii_general_ci'),
('ascii', 'ascii_general_ci', 'swe7', 'swe7_swedish_ci'),
('eucjpms', 'eucjpms_japanese_nopad_ci', 'geostd8', 'geostd8_general_ci'),
('latin1', 'latin1_general_ci', 'utf16', 'utf16_general_ci')
;
create table tmp ( create table tmp (
a varchar(150) charset utf8mb4 collate utf8mb4_general_ci, a varchar(150) charset utf8mb4 collate utf8mb4_general_ci,
b text(150) charset utf8mb4 collate utf8mb4_general_ci, b text(150) charset utf8mb4 collate utf8mb4_general_ci,
...@@ -1810,3 +1781,42 @@ algorithm=instant; ...@@ -1810,3 +1781,42 @@ algorithm=instant;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
drop table tmp; drop table tmp;
drop table fully_incompatible; drop table fully_incompatible;
#
# MDEV-19284 INSTANT ALTER with ucs2-to-utf16 conversion produces bad data
#
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET ucs2, PRIMARY KEY(a)) ENGINE=InnoDB;
INSERT INTO t1 VALUES ('a'),(0xD800);
ALTER TABLE t1 ALGORITHM=COPY, MODIFY a VARCHAR(10) CHARACTER SET utf16;
ERROR 22007: Incorrect string value: '\xD8\x00' for column `test`.`t1`.`a` at row 2
ALTER TABLE t1 ALGORITHM=INSTANT, MODIFY a VARCHAR(10) CHARACTER SET utf16;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
ALTER IGNORE TABLE t1 MODIFY a VARCHAR(10) CHARACTER SET utf16;
affected rows: 2
info: Records: 2 Duplicates: 0 Warnings: 1
Warnings:
Warning 1366 Incorrect string value: '\xD8\x00' for column `test`.`t1`.`a` at row 2
SELECT HEX(a) FROM t1;
HEX(a)
003F
0061
DROP TABLE t1;
#
# MDEV-19285 INSTANT ALTER from ascii_general_ci to latin1_general_ci produces currupt data
#
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET ascii COLLATE ascii_general_ci, PRIMARY KEY(a)) ENGINE=InnoDB;
INSERT INTO t1 VALUES ('a'),(0xC0),('b');
ALTER TABLE t1 ALGORITHM=COPY, MODIFY a VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci;
ERROR 22007: Incorrect string value: '\xC0' for column `test`.`t1`.`a` at row 3
ALTER TABLE t1 ALGORITHM=INSTANT, MODIFY a VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci;
ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY
ALTER IGNORE TABLE t1 MODIFY a VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci;
affected rows: 3
info: Records: 3 Duplicates: 0 Warnings: 1
Warnings:
Warning 1366 Incorrect string value: '\xC0' for column `test`.`t1`.`a` at row 3
SELECT HEX(a) FROM t1;
HEX(a)
3F
61
62
DROP TABLE t1;
...@@ -20,9 +20,13 @@ select c.prtype, c.len from information_schema.innodb_sys_columns as c inner joi ...@@ -20,9 +20,13 @@ select c.prtype, c.len from information_schema.innodb_sys_columns as c inner joi
alter table no_rebuild alter table no_rebuild
change a a char(150) charset utf8mb3 collate utf8mb3_spanish_ci, change a a char(150) charset utf8mb3 collate utf8mb3_spanish_ci,
algorithm=inplace; algorithm=inplace;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table rebuild alter table rebuild
change a a varchar(150) charset latin1 not null default 'asdf', change a a varchar(150) charset latin1 not null default 'asdf',
algorithm=inplace; algorithm=inplace;
alter table rebuild
change a a varchar(150) charset latin1 not null default 'asdf',
algorithm=copy;
select name, prtype, len from information_schema.innodb_sys_columns select name, prtype, len from information_schema.innodb_sys_columns
where table_id = @id; where table_id = @id;
select c.prtype, c.len from information_schema.innodb_sys_columns as c inner join information_schema.innodb_sys_tables t on c.table_id = t.table_id select c.prtype, c.len from information_schema.innodb_sys_columns as c inner join information_schema.innodb_sys_tables t on c.table_id = t.table_id
...@@ -41,7 +45,7 @@ create table supported_types ( ...@@ -41,7 +45,7 @@ create table supported_types (
) engine=innodb; ) engine=innodb;
alter table supported_types alter table supported_types
convert to charset latin1, convert to charset ascii collate ascii_bin,
algorithm=instant; algorithm=instant;
drop table supported_types; drop table supported_types;
...@@ -53,7 +57,7 @@ create table various_cases ( ...@@ -53,7 +57,7 @@ create table various_cases (
) engine=innodb; ) engine=innodb;
alter table various_cases alter table various_cases
change a a char(150) charset latin1, change a a char(150) charset ascii collate ascii_bin,
algorithm=inplace; algorithm=inplace;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON --error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
...@@ -88,7 +92,7 @@ create table all_texts ( ...@@ -88,7 +92,7 @@ create table all_texts (
) engine=innodb; ) engine=innodb;
alter table all_texts alter table all_texts
convert to charset latin1 collate latin1_general_ci, convert to charset ascii collate ascii_bin,
algorithm=instant; algorithm=instant;
drop table all_texts; drop table all_texts;
...@@ -244,10 +248,15 @@ alter table latin1_swedish_special_case ...@@ -244,10 +248,15 @@ alter table latin1_swedish_special_case
modify copy1 varchar(150) charset latin1 collate latin1_swedish_ci, modify copy1 varchar(150) charset latin1 collate latin1_swedish_ci,
modify copy2 char(150) charset latin1 collate latin1_swedish_ci, modify copy2 char(150) charset latin1 collate latin1_swedish_ci,
algorithm=copy; algorithm=copy;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table latin1_swedish_special_case alter table latin1_swedish_special_case
modify instant1 varchar(150) charset latin1 collate latin1_swedish_ci, modify instant1 varchar(150) charset latin1 collate latin1_swedish_ci,
modify instant2 char(150) charset latin1 collate latin1_swedish_ci, modify instant2 char(150) charset latin1 collate latin1_swedish_ci,
algorithm=instant; algorithm=instant;
alter table latin1_swedish_special_case
modify instant1 varchar(150) charset latin1 collate latin1_swedish_ci,
modify instant2 char(150) charset latin1 collate latin1_swedish_ci,
algorithm=copy;
select c.name, c.prtype, c.mtype, c.len from information_schema.innodb_sys_columns as c inner join information_schema.innodb_sys_tables t on c.table_id = t.table_id select c.name, c.prtype, c.mtype, c.len from information_schema.innodb_sys_columns as c inner join information_schema.innodb_sys_tables t on c.table_id = t.table_id
where t.name = 'test/latin1_swedish_special_case'; where t.name = 'test/latin1_swedish_special_case';
alter table latin1_swedish_special_case alter table latin1_swedish_special_case
...@@ -275,25 +284,41 @@ create table boundary_255 ( ...@@ -275,25 +284,41 @@ create table boundary_255 (
c varchar(300) charset ascii c varchar(300) charset ascii
) engine=innodb; ) engine=innodb;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table boundary_255 alter table boundary_255
modify a varchar(50) charset utf8mb3, modify a varchar(50) charset utf8mb3,
algorithm=instant; algorithm=instant;
alter table boundary_255
modify a varchar(50) charset utf8mb3,
algorithm=copy;
if ($row_format == 'redundant') { --error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table boundary_255 alter table boundary_255
modify b varchar(200) charset utf8mb3, modify b varchar(200) charset utf8mb3,
algorithm=instant; algorithm=instant;
}
if ($row_format != 'redundant') {
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON --error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table boundary_255 alter table boundary_255
modify b varchar(200) charset utf8mb3, modify c varchar(300) charset utf8mb3,
algorithm=instant; algorithm=instant;
}
drop table boundary_255;
create table boundary_255 (
a varchar(70) charset utf8mb3
) engine=innodb;
if ($row_format == 'redundant') {
alter table boundary_255 alter table boundary_255
modify c varchar(300) charset utf8mb3, modify a varchar(70) charset utf8mb4,
algorithm=instant; algorithm=instant;
}
if ($row_format != 'redundant') {
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table boundary_255
modify a varchar(70) charset utf8mb4,
algorithm=instant;
}
drop table boundary_255; drop table boundary_255;
...@@ -338,30 +363,7 @@ insert into fully_compatible (from_charset, from_collate, to_charset, to_collate ...@@ -338,30 +363,7 @@ insert into fully_compatible (from_charset, from_collate, to_charset, to_collate
('utf8mb3', 'utf8mb3_general_nopad_ci', 'utf8mb4', 'utf8mb4_general_nopad_ci'), ('utf8mb3', 'utf8mb3_general_nopad_ci', 'utf8mb4', 'utf8mb4_general_nopad_ci'),
('utf8mb3', 'utf8mb3_nopad_bin', 'utf8mb4', 'utf8mb4_nopad_bin'), ('utf8mb3', 'utf8mb3_nopad_bin', 'utf8mb4', 'utf8mb4_nopad_bin'),
('utf8mb3', 'utf8mb3_unicode_nopad_ci', 'utf8mb4', 'utf8mb4_unicode_nopad_ci'), ('utf8mb3', 'utf8mb3_unicode_nopad_ci', 'utf8mb4', 'utf8mb4_unicode_nopad_ci'),
('utf8mb3', 'utf8mb3_unicode_520_nopad_ci', 'utf8mb4', 'utf8mb4_unicode_520_nopad_ci'), ('utf8mb3', 'utf8mb3_unicode_520_nopad_ci', 'utf8mb4', 'utf8mb4_unicode_520_nopad_ci')
('ucs2', 'ucs2_general_ci', 'utf16', 'utf16_general_ci'),
('ucs2', 'ucs2_unicode_ci', 'utf16', 'utf16_unicode_ci'),
('ucs2', 'ucs2_icelandic_ci', 'utf16', 'utf16_icelandic_ci'),
('ucs2', 'ucs2_latvian_ci', 'utf16', 'utf16_latvian_ci'),
('ucs2', 'ucs2_romanian_ci', 'utf16', 'utf16_romanian_ci'),
('ucs2', 'ucs2_slovenian_ci', 'utf16', 'utf16_slovenian_ci'),
('ucs2', 'ucs2_polish_ci', 'utf16', 'utf16_polish_ci'),
('ucs2', 'ucs2_estonian_ci', 'utf16', 'utf16_estonian_ci'),
('ucs2', 'ucs2_spanish_ci', 'utf16', 'utf16_spanish_ci'),
('ucs2', 'ucs2_general_ci', 'utf16', 'utf16_general_ci'),
('ascii', 'ascii_general_ci', 'utf8mb3', 'utf8mb3_general_ci'),
('ascii', 'ascii_general_ci', 'utf8mb4', 'utf8mb4_general_ci'),
('ascii', 'ascii_general_ci', 'latin1', 'latin1_general_ci'),
('ascii', 'ascii_bin', 'latin1', 'latin1_bin'),
('ascii', 'ascii_nopad_bin', 'latin1', 'latin1_nopad_bin'),
('ascii', 'ascii_general_ci', 'latin2', 'latin2_general_ci'),
('ascii', 'ascii_general_ci', 'latin7', 'latin7_general_ci'),
('ascii', 'ascii_bin', 'koi8u', 'koi8u_bin'),
('ascii', 'ascii_bin', 'ujis', 'ujis_bin'),
('ascii', 'ascii_bin', 'big5', 'big5_bin'),
('ascii', 'ascii_bin', 'gbk', 'gbk_bin')
; ;
let $data_size = `select count(*) from fully_compatible`; let $data_size = `select count(*) from fully_compatible`;
...@@ -404,47 +406,19 @@ create table compatible_without_index ( ...@@ -404,47 +406,19 @@ create table compatible_without_index (
); );
insert into compatible_without_index (from_charset, from_collate, to_charset, to_collate) values insert into compatible_without_index (from_charset, from_collate, to_charset, to_collate) values
('ascii', 'ascii_general_ci', 'utf8mb3', 'utf8mb3_swedish_ci'),
('ascii', 'ascii_bin', 'latin1', 'latin1_swedish_ci'),
('ascii', 'ascii_general_nopad_ci', 'latin1', 'latin1_swedish_ci'),
('ascii', 'ascii_nopad_bin', 'latin1', 'latin1_swedish_ci'),
('ascii', 'ascii_general_ci', 'koi8u', 'koi8u_bin'),
('ascii', 'ascii_general_nopad_ci', 'koi8u', 'koi8u_bin'),
('ascii', 'ascii_nopad_bin', 'koi8u', 'koi8u_bin'),
('ascii', 'ascii_general_ci', 'latin1', 'latin1_swedish_ci'),
('ascii', 'ascii_bin', 'utf8mb3', 'utf8mb3_swedish_ci'),
('ascii', 'ascii_general_nopad_ci', 'utf8mb3', 'utf8mb3_swedish_ci'),
('ascii', 'ascii_nopad_bin', 'utf8mb3', 'utf8mb3_swedish_ci'),
('ascii', 'ascii_general_ci', 'utf8mb4', 'utf8mb4_danish_ci'),
('ascii', 'ascii_bin', 'utf8mb4', 'utf8mb4_danish_ci'),
('ascii', 'ascii_general_nopad_ci', 'utf8mb4', 'utf8mb4_danish_ci'),
('ascii', 'ascii_nopad_bin', 'utf8mb4', 'utf8mb4_danish_ci'),
('utf8mb3', 'utf8mb3_general_ci', 'utf8mb4', 'utf8mb4_vietnamese_ci'), ('utf8mb3', 'utf8mb3_general_ci', 'utf8mb4', 'utf8mb4_vietnamese_ci'),
('utf8mb3', 'utf8mb3_bin', 'utf8mb4', 'utf8mb4_vietnamese_ci'), ('utf8mb3', 'utf8mb3_bin', 'utf8mb4', 'utf8mb4_vietnamese_ci'),
('utf8mb3', 'utf8mb3_general_nopad_ci', 'utf8mb4', 'utf8mb4_vietnamese_ci'), ('utf8mb3', 'utf8mb3_general_nopad_ci', 'utf8mb4', 'utf8mb4_vietnamese_ci'),
('utf8mb3', 'utf8mb3_nopad_bin', 'utf8mb4', 'utf8mb4_vietnamese_ci'), ('utf8mb3', 'utf8mb3_nopad_bin', 'utf8mb4', 'utf8mb4_vietnamese_ci'),
('ascii', 'ascii_general_ci', 'gbk', 'gbk_chinese_ci'),
('ascii', 'ascii_general_ci', 'gbk', 'gbk_chinese_nopad_ci'),
('ucs2', 'ucs2_myanmar_ci', 'utf16', 'utf16_thai_520_w2'),
('ucs2', 'ucs2_general_ci', 'utf16', 'utf16_unicode_nopad_ci'),
('ucs2', 'ucs2_general_mysql500_ci', 'utf16', 'utf16_spanish2_ci'),
('ascii', 'ascii_general_ci', 'ascii', 'ascii_bin'), ('ascii', 'ascii_general_ci', 'ascii', 'ascii_bin'),
('utf8mb3', 'utf8mb3_roman_ci', 'utf8mb3', 'utf8mb3_lithuanian_ci'), ('utf8mb3', 'utf8mb3_roman_ci', 'utf8mb3', 'utf8mb3_lithuanian_ci'),
('utf8mb4', 'utf8mb4_thai_520_w2', 'utf8mb4', 'utf8mb4_persian_ci'), ('utf8mb4', 'utf8mb4_thai_520_w2', 'utf8mb4', 'utf8mb4_persian_ci'),
('utf8mb3', 'utf8mb3_myanmar_ci', 'utf8mb4', 'utf8mb4_german2_ci'), ('utf8mb3', 'utf8mb3_myanmar_ci', 'utf8mb4', 'utf8mb4_german2_ci'),
('utf8mb3', 'utf8mb3_general_ci', 'utf8mb3', 'utf8mb3_unicode_ci'), ('utf8mb3', 'utf8mb3_general_ci', 'utf8mb3', 'utf8mb3_unicode_ci'),
('latin1', 'latin1_general_cs', 'latin1', 'latin1_general_ci'), ('latin1', 'latin1_general_cs', 'latin1', 'latin1_general_ci'),
('ascii', 'ascii_general_ci', 'ujis', 'ujis_japanese_ci'),
('ascii', 'ascii_general_ci', 'big5', 'big5_chinese_ci'),
('ascii', 'ascii_general_ci', 'latin2', 'latin2_croatian_ci'),
('ascii', 'ascii_general_ci', 'latin7', 'latin7_estonian_cs'),
('utf16', 'utf16_general_ci', 'utf16', 'utf16_german2_ci') ('utf16', 'utf16_general_ci', 'utf16', 'utf16_german2_ci')
; ;
...@@ -494,6 +468,59 @@ create table fully_incompatible ( ...@@ -494,6 +468,59 @@ create table fully_incompatible (
); );
insert into fully_incompatible (from_charset, from_collate, to_charset, to_collate) values insert into fully_incompatible (from_charset, from_collate, to_charset, to_collate) values
('ascii', 'ascii_general_ci', 'utf8mb3', 'utf8mb3_general_ci'),
('ascii', 'ascii_general_ci', 'utf8mb4', 'utf8mb4_general_ci'),
('ascii', 'ascii_general_ci', 'latin1', 'latin1_general_ci'),
('ascii', 'ascii_bin', 'latin1', 'latin1_bin'),
('ascii', 'ascii_nopad_bin', 'latin1', 'latin1_nopad_bin'),
('ascii', 'ascii_general_ci', 'latin2', 'latin2_general_ci'),
('ascii', 'ascii_general_ci', 'latin7', 'latin7_general_ci'),
('ascii', 'ascii_bin', 'koi8u', 'koi8u_bin'),
('ascii', 'ascii_bin', 'ujis', 'ujis_bin'),
('ascii', 'ascii_bin', 'big5', 'big5_bin'),
('ascii', 'ascii_bin', 'gbk', 'gbk_bin'),
('ascii', 'ascii_general_ci', 'utf8mb3', 'utf8mb3_swedish_ci'),
('ascii', 'ascii_bin', 'latin1', 'latin1_swedish_ci'),
('ascii', 'ascii_general_nopad_ci', 'latin1', 'latin1_swedish_ci'),
('ascii', 'ascii_nopad_bin', 'latin1', 'latin1_swedish_ci'),
('ascii', 'ascii_general_ci', 'koi8u', 'koi8u_bin'),
('ascii', 'ascii_general_nopad_ci', 'koi8u', 'koi8u_bin'),
('ascii', 'ascii_nopad_bin', 'koi8u', 'koi8u_bin'),
('ascii', 'ascii_general_ci', 'latin1', 'latin1_swedish_ci'),
('ascii', 'ascii_bin', 'utf8mb3', 'utf8mb3_swedish_ci'),
('ascii', 'ascii_general_nopad_ci', 'utf8mb3', 'utf8mb3_swedish_ci'),
('ascii', 'ascii_nopad_bin', 'utf8mb3', 'utf8mb3_swedish_ci'),
('ascii', 'ascii_general_ci', 'utf8mb4', 'utf8mb4_danish_ci'),
('ascii', 'ascii_bin', 'utf8mb4', 'utf8mb4_danish_ci'),
('ascii', 'ascii_general_nopad_ci', 'utf8mb4', 'utf8mb4_danish_ci'),
('ascii', 'ascii_nopad_bin', 'utf8mb4', 'utf8mb4_danish_ci'),
('ascii', 'ascii_general_ci', 'gbk', 'gbk_chinese_ci'),
('ascii', 'ascii_general_ci', 'gbk', 'gbk_chinese_nopad_ci'),
('ascii', 'ascii_general_ci', 'ujis', 'ujis_japanese_ci'),
('ascii', 'ascii_general_ci', 'big5', 'big5_chinese_ci'),
('ascii', 'ascii_general_ci', 'latin2', 'latin2_croatian_ci'),
('ascii', 'ascii_general_ci', 'latin7', 'latin7_estonian_cs'),
('ucs2', 'ucs2_general_ci', 'utf16', 'utf16_general_ci'),
('ucs2', 'ucs2_unicode_ci', 'utf16', 'utf16_unicode_ci'),
('ucs2', 'ucs2_icelandic_ci', 'utf16', 'utf16_icelandic_ci'),
('ucs2', 'ucs2_latvian_ci', 'utf16', 'utf16_latvian_ci'),
('ucs2', 'ucs2_romanian_ci', 'utf16', 'utf16_romanian_ci'),
('ucs2', 'ucs2_slovenian_ci', 'utf16', 'utf16_slovenian_ci'),
('ucs2', 'ucs2_polish_ci', 'utf16', 'utf16_polish_ci'),
('ucs2', 'ucs2_estonian_ci', 'utf16', 'utf16_estonian_ci'),
('ucs2', 'ucs2_spanish_ci', 'utf16', 'utf16_spanish_ci'),
('ucs2', 'ucs2_general_ci', 'utf16', 'utf16_general_ci'),
('ucs2', 'ucs2_myanmar_ci', 'utf16', 'utf16_thai_520_w2'),
('ucs2', 'ucs2_general_ci', 'utf16', 'utf16_unicode_nopad_ci'),
('ucs2', 'ucs2_general_mysql500_ci', 'utf16', 'utf16_spanish2_ci'),
('utf8mb4', 'utf8mb4_general_ci', 'utf8mb3', 'utf8mb3_general_ci'), ('utf8mb4', 'utf8mb4_general_ci', 'utf8mb3', 'utf8mb3_general_ci'),
('utf8mb4', 'utf8mb4_general_ci', 'ascii', 'ascii_general_ci'), ('utf8mb4', 'utf8mb4_general_ci', 'ascii', 'ascii_general_ci'),
('utf8mb3', 'utf8mb3_general_ci', 'ascii', 'ascii_general_ci'), ('utf8mb3', 'utf8mb3_general_ci', 'ascii', 'ascii_general_ci'),
...@@ -536,3 +563,33 @@ while ($counter <= $data_size) { ...@@ -536,3 +563,33 @@ while ($counter <= $data_size) {
} }
drop table fully_incompatible; drop table fully_incompatible;
--echo #
--echo # MDEV-19284 INSTANT ALTER with ucs2-to-utf16 conversion produces bad data
--echo #
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET ucs2, PRIMARY KEY(a)) ENGINE=InnoDB;
INSERT INTO t1 VALUES ('a'),(0xD800);
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
ALTER TABLE t1 ALGORITHM=COPY, MODIFY a VARCHAR(10) CHARACTER SET utf16;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
ALTER TABLE t1 ALGORITHM=INSTANT, MODIFY a VARCHAR(10) CHARACTER SET utf16;
--enable_info ONCE
ALTER IGNORE TABLE t1 MODIFY a VARCHAR(10) CHARACTER SET utf16;
SELECT HEX(a) FROM t1;
DROP TABLE t1;
--echo #
--echo # MDEV-19285 INSTANT ALTER from ascii_general_ci to latin1_general_ci produces currupt data
--echo #
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET ascii COLLATE ascii_general_ci, PRIMARY KEY(a)) ENGINE=InnoDB;
INSERT INTO t1 VALUES ('a'),(0xC0),('b');
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
ALTER TABLE t1 ALGORITHM=COPY, MODIFY a VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
ALTER TABLE t1 ALGORITHM=INSTANT, MODIFY a VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci;
--enable_info ONCE
ALTER IGNORE TABLE t1 MODIFY a VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci;
SELECT HEX(a) FROM t1;
DROP TABLE t1;
...@@ -7092,6 +7092,17 @@ int Field_str::store(double nr) ...@@ -7092,6 +7092,17 @@ int Field_str::store(double nr)
} }
bool Field_longstr::
csinfo_change_allows_instant_alter(const Create_field *to) const
{
Charset cs(field_charset);
const bool part_of_a_key= !to->field->part_of_key.is_clear_all();
return part_of_a_key ?
cs.encoding_and_order_allow_reinterpret_as(to->charset) :
cs.encoding_allows_reinterpret_as(to->charset);
}
uint Field_string::is_equal(Create_field *new_field) uint Field_string::is_equal(Create_field *new_field)
{ {
DBUG_ASSERT(!compression_method()); DBUG_ASSERT(!compression_method());
...@@ -7102,9 +7113,7 @@ uint Field_string::is_equal(Create_field *new_field) ...@@ -7102,9 +7113,7 @@ uint Field_string::is_equal(Create_field *new_field)
if (new_field->char_length < char_length()) if (new_field->char_length < char_length())
return IS_EQUAL_NO; return IS_EQUAL_NO;
const bool part_of_a_key= !new_field->field->part_of_key.is_clear_all(); if (!csinfo_change_allows_instant_alter(new_field))
if (!Type_handler::Charsets_are_compatible(field_charset, new_field->charset,
part_of_a_key))
return IS_EQUAL_NO; return IS_EQUAL_NO;
if (new_field->length == max_display_length()) if (new_field->length == max_display_length())
...@@ -7954,9 +7963,7 @@ uint Field_varstring::is_equal(Create_field *new_field) ...@@ -7954,9 +7963,7 @@ uint Field_varstring::is_equal(Create_field *new_field)
if (!new_field->compression_method() != !compression_method()) if (!new_field->compression_method() != !compression_method())
return IS_EQUAL_NO; return IS_EQUAL_NO;
bool part_of_a_key= !new_field->field->part_of_key.is_clear_all(); if (!csinfo_change_allows_instant_alter(new_field))
if (!Type_handler::Charsets_are_compatible(field_charset, new_field->charset,
part_of_a_key))
return IS_EQUAL_NO; return IS_EQUAL_NO;
const Type_handler *new_type_handler= new_field->type_handler(); const Type_handler *new_type_handler= new_field->type_handler();
...@@ -8751,12 +8758,8 @@ uint Field_blob::is_equal(Create_field *new_field) ...@@ -8751,12 +8758,8 @@ uint Field_blob::is_equal(Create_field *new_field)
return IS_EQUAL_NO; return IS_EQUAL_NO;
} }
bool part_of_a_key= !new_field->field->part_of_key.is_clear_all(); if (!csinfo_change_allows_instant_alter(new_field))
if (!Type_handler::Charsets_are_compatible(field_charset, new_field->charset,
part_of_a_key))
{
return IS_EQUAL_NO; return IS_EQUAL_NO;
}
if (field_charset != new_field->charset) if (field_charset != new_field->charset)
{ {
......
...@@ -1926,6 +1926,7 @@ class Field_longstr :public Field_str ...@@ -1926,6 +1926,7 @@ class Field_longstr :public Field_str
CHARSET_INFO *cs, size_t nchars); CHARSET_INFO *cs, size_t nchars);
String *uncompress(String *val_buffer, String *val_ptr, String *uncompress(String *val_buffer, String *val_ptr,
const uchar *from, uint from_length); const uchar *from, uint from_length);
bool csinfo_change_allows_instant_alter(const Create_field *to) const;
public: public:
Field_longstr(uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, Field_longstr(uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg,
uchar null_bit_arg, utype unireg_check_arg, uchar null_bit_arg, utype unireg_check_arg,
......
...@@ -159,6 +159,14 @@ class Charset ...@@ -159,6 +159,14 @@ class Charset
{ {
swap_variables(CHARSET_INFO*, m_charset, other.m_charset); swap_variables(CHARSET_INFO*, m_charset, other.m_charset);
} }
/*
Collation name without the character set name.
For example, in case of "latin1_swedish_ci",
this method returns "_swedish_ci".
*/
LEX_CSTRING collation_specific_name() const;
bool encoding_allows_reinterpret_as(CHARSET_INFO *cs) const;
bool encoding_and_order_allow_reinterpret_as(CHARSET_INFO *cs) const;
}; };
......
...@@ -8219,48 +8219,51 @@ Type_handler_timestamp_common::Item_param_val_native(THD *thd, ...@@ -8219,48 +8219,51 @@ Type_handler_timestamp_common::Item_param_val_native(THD *thd,
TIME_to_native(thd, &ltime, to, item->datetime_precision(thd)); TIME_to_native(thd, &ltime, to, item->datetime_precision(thd));
} }
static bool charsets_are_compatible(const char *old_cs_name,
const CHARSET_INFO *new_ci)
{
const char *new_cs_name= new_ci->csname;
if (!strcmp(old_cs_name, new_cs_name)) LEX_CSTRING Charset::collation_specific_name() const
return true; {
/*
User defined collations can provide arbitrary names
for character sets and collations, so a collation
name not necessarily starts with the character set name.
*/
size_t csname_length= strlen(m_charset->csname);
if (strncmp(m_charset->name, m_charset->csname, csname_length))
return {NULL, 0};
const char *ptr= m_charset->name + csname_length;
return {ptr, strlen(ptr) };
}
if (!strcmp(old_cs_name, MY_UTF8MB3) && !strcmp(new_cs_name, MY_UTF8MB4))
return true;
if (!strcmp(old_cs_name, "ascii") && !(new_ci->state & MY_CS_NONASCII)) bool
Charset::encoding_allows_reinterpret_as(const CHARSET_INFO *cs) const
{
if (!strcmp(m_charset->csname, cs->csname))
return true; return true;
if (!strcmp(old_cs_name, "ucs2") && !strcmp(new_cs_name, "utf16")) if (!strcmp(m_charset->csname, MY_UTF8MB3) &&
!strcmp(cs->csname, MY_UTF8MB4))
return true; return true;
/*
Originally we allowed here instat ALTER for ASCII-to-LATIN1
and UCS2-to-UTF16, but this was wrong:
- MariaDB's ascii is not a subset for 8-bit character sets
like latin1, because it allows storing bytes 0x80..0xFF as
"unassigned" characters (see MDEV-19285).
- MariaDB's ucs2 (as in Unicode-1.1) is not a subset for UTF16,
because they treat surrogate codes differently (MDEV-19284).
*/
return false; return false;
} }
bool Type_handler::Charsets_are_compatible(const CHARSET_INFO *old_ci,
const CHARSET_INFO *new_ci,
bool part_of_a_key)
{
const char *old_cs_name= old_ci->csname;
const char *new_cs_name= new_ci->csname;
if (!charsets_are_compatible(old_cs_name, new_ci))
{
return false;
}
if (!part_of_a_key)
{
return true;
}
if (strcmp(old_ci->name + strlen(old_cs_name), bool
new_ci->name + strlen(new_cs_name))) Charset::encoding_and_order_allow_reinterpret_as(CHARSET_INFO *cs) const
{ {
if (!encoding_allows_reinterpret_as(cs))
return false; return false;
} LEX_CSTRING name0= collation_specific_name();
LEX_CSTRING name1= Charset(cs).collation_specific_name();
return true; return name0.length && !cmp(&name0, &name1);
} }
...@@ -3705,10 +3705,6 @@ class Type_handler ...@@ -3705,10 +3705,6 @@ class Type_handler
virtual bool virtual bool
Vers_history_point_resolve_unit(THD *thd, Vers_history_point *point) const; Vers_history_point_resolve_unit(THD *thd, Vers_history_point *point) const;
static bool Charsets_are_compatible(const CHARSET_INFO *old_ci,
const CHARSET_INFO *new_ci,
bool part_of_a_key);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment