Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  instant_alter_charset.test  Sprache: unbekannt

 
Spracherkennung für: .test vermutete Sprache: SQL {SQL[114] Fortran[36] VDM[36]} [Methode: maximale Elemente, drei Dimensionen]

--source include/innodb_row_format.inc

--let $row_format= `SELECT @@GLOBAL.innodb_default_row_format`
set names utf8;

create table no_rebuild (
  a char(150) charset utf8mb3 collate utf8mb3_general_ci
) engine=innodb;
create table rebuild (
  a varchar(150) charset ascii
) engine=innodb;

set @id = (select table_id from information_schema.innodb_sys_tables
  where name = 'test/no_rebuild');
select name, prtype, len from information_schema.innodb_sys_columns
  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
  where t.name = 'test/rebuild' and c.name = 'a';
alter table no_rebuild
  change a a char(150) charset utf8mb3 collate utf8mb3_spanish_ci,
  algorithm=inplace;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table rebuild
  change a a varchar(150) charset latin1 not null default 'asdf',
  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
  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
  where t.name = 'test/rebuild' and c.name = 'a';

drop table no_rebuild, rebuild;

create table supported_types (
  id int primary key auto_increment,
  a varchar(150) charset ascii,
  b text(150) charset ascii,
  c text charset ascii,
  d tinytext charset ascii,
  e mediumtext charset ascii,
  f longtext charset ascii
) engine=innodb;

alter table supported_types
  convert to charset ascii collate ascii_bin,
  algorithm=instant;

drop table supported_types;

create table various_cases (
  a char(150) charset ascii,
  b varchar(150) as (a) virtual,
  c char(150) as (a) persistent
) engine=innodb;

alter table various_cases
  change a a char(150) charset ascii collate ascii_bin,
  algorithm=inplace;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table various_cases
  change a a varchar(222),
  algorithm=inplace;

alter table various_cases
  change b b varchar(150) as (a) virtual,
  algorithm=inplace;

--error ER_ALTER_OPERATION_NOT_SUPPORTED
alter table various_cases
  change c c char(150) as (a) persistent,
  algorithm=inplace;

# Can not grow storage in bytes from CHAR
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table various_cases
  modify a char(150) charset utf8mb4,
  algorithm=instant;

drop table various_cases;


create table all_texts (
  a tinytext charset ascii,
  b text charset ascii,
  c mediumtext charset ascii,
  d longtext charset ascii,
  footer int
) engine=innodb;

alter table all_texts
  convert to charset ascii collate ascii_bin,
  algorithm=instant;

drop table all_texts;


create table all_binaries (
  a tinyblob,
  b blob,
  c mediumblob,
  d longblob,
  e varbinary(150),
  f binary(150)
) engine=innodb;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_binaries modify a tinytext, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_binaries modify b text, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_binaries modify c mediumtext, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_binaries modify d longtext, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_binaries modify e varchar(150), algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_binaries modify f char(150), algorithm=instant;

drop table all_binaries;

create table all_strings (
  a tinytext,
  b text,
  c mediumtext,
  d longtext,
  e varchar(150),
  f char(150)
) engine=innodb;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_strings modify a tinyblob, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_strings modify b blob, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_strings modify c mediumblob, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_strings modify d longblob, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_strings modify e varbinary(150), algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_strings modify f binary(150), algorithm=instant;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_strings modify a tinytext charset binary, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_strings modify b text charset binary, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_strings modify c mediumtext charset binary, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_strings modify d longtext charset binary, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_strings modify e varchar(150) charset binary, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table all_strings modify f char(150) charset binary, algorithm=instant;

drop table all_strings;

create table key_part_change (
  a char(150) charset ascii,
  b char(150) charset ascii,
  c char(150) charset ascii,
  unique key ab (a,b)
) engine=innodb;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table key_part_change
  modify a char(150) charset utf8mb4,
  drop index ab,
  add unique key ab(a,c),
  algorithm=instant;

drop table key_part_change;

create table key_part_change_and_rename (
  a char(100) charset ascii,
  b char(100) charset ascii,
  unique key ab (a,b)
) engine=innodb;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table key_part_change_and_rename
  change a b char(100) charset utf8mb4,
  change b a char(100) charset utf8mb4,
  drop index ab,
  add unique key ab(a,b),
  algorithm=instant;

drop table key_part_change_and_rename;

create table enum_and_set (
  a enum('one', 'two') charset utf8mb3,
  b set('three', 'four') charset utf8mb3
) engine=innodb;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table enum_and_set
  modify a enum('one', 'two') charset utf8mb4,
  algorithm=instant;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table enum_and_set
  modify b enum('three', 'four') charset utf8mb4,
  algorithm=instant;

drop table enum_and_set;

create table compressed (
  a varchar(255) compressed charset utf8mb3
) engine=innodb;

insert into compressed values ('AAA'), ('bbb'), ('CCC');

alter table compressed
  modify a varchar(255) compressed charset utf8mb4,
  algorithm=instant;

select * from compressed;
check table compresed;

drop table compressed;

create table key_part_bug (
  id int primary key auto_increment,
  a varchar(150) charset utf8mb3 unique key
) engine=innodb;

alter table key_part_bug
  modify a varchar(150) charset utf8mb4,
  algorithm=instant;

drop table key_part_bug;


create table latin1_swedish_special_case (
  copy1 varchar(150) charset ascii collate ascii_general_ci,
  copy2 char(150) charset ascii collate ascii_general_ci,
  instant1 varchar(150) charset ascii collate ascii_general_ci,
  instant2 char(150) charset ascii collate ascii_general_ci
) engine=innodb;

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';
alter table latin1_swedish_special_case
  modify copy1 varchar(150) charset latin1 collate latin1_swedish_ci,
  modify copy2 char(150) charset latin1 collate latin1_swedish_ci,
  algorithm=copy;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
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=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
  where t.name = 'test/latin1_swedish_special_case';
alter table latin1_swedish_special_case
  modify copy1 varchar(150) charset latin1 collate latin1_general_ci,
  modify copy2 char(150) charset latin1 collate latin1_general_ci,
  algorithm=copy;
alter table latin1_swedish_special_case
  modify instant1 varchar(150) charset latin1 collate latin1_general_ci,
  modify instant2 char(150) charset latin1 collate latin1_general_ci,
  algorithm=instant;
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';

drop table latin1_swedish_special_case;

create table regression (a varchar(100) charset utf8mb3 primary key, b int) engine=innodb;
alter table regression convert to character set utf8mb4;
drop table regression;

# ROW_FORMAT=DYNAMIC limitation:
# size in bytes cannot be increased from less of equal that 255 to more than 255
create table boundary_255 (
  a varchar(50) charset ascii,
  b varchar(200) charset ascii,
  c varchar(300) charset ascii
) engine=innodb;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table boundary_255
  modify a varchar(50) charset utf8mb3,
  algorithm=instant;
alter table boundary_255
  modify a varchar(50) charset utf8mb3,
  algorithm=copy;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table boundary_255
  modify b varchar(200) charset utf8mb3,
  algorithm=instant;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table boundary_255
  modify c varchar(300) charset utf8mb3,
  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
  modify a varchar(70) charset utf8mb4,
  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;


create table t (
  a char(10) collate utf8mb3_general_ci,
  b char(70) collate utf8mb3_general_ci,
  c char(100) collate utf8mb3_general_ci,

  aa char(10) collate utf8mb3_general_ci unique,
  bb char(70) collate utf8mb3_general_ci unique,
  cc char(100) collate utf8mb3_general_ci unique,

  d char(10) collate utf8mb3_general_ci,
  dd char(10) collate utf8mb3_general_ci unique
) engine=innodb;
insert into t values
  (repeat('a', 10), repeat('a', 70), repeat('a', 100),
   repeat('a', 10), repeat('a', 70), repeat('a', 100),
   repeat('a', 10), repeat('a', 10)
);
if ($row_format != 'redundant') {
alter table t modify a char(10) collate utf8mb4_general_ci, algorithm=instant;
check table t;
alter table t modify b char(70) collate utf8mb4_general_ci, algorithm=instant;
check table t;
alter table t modify c char(100) collate utf8mb4_general_ci, algorithm=instant;
check table t;

alter table t modify aa char(10) collate utf8mb4_general_ci, algorithm=instant;
check table t;
alter table t modify bb char(70) collate utf8mb4_general_ci, algorithm=instant;
check table t;
alter table t modify cc char(100) collate utf8mb4_general_ci, algorithm=instant;
check table t;

alter table t modify d char(10) collate utf8mb4_spanish_ci, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t modify dd char(10) collate utf8mb4_spanish_ci, algorithm=instant;
}
if ($row_format == 'redundant') {
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t modify a char(10) collate utf8mb4_general_ci, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t modify b char(70) collate utf8mb4_general_ci, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t modify c char(100) collate utf8mb4_general_ci, algorithm=instant;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t modify aa char(10) collate utf8mb4_general_ci, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t modify bb char(70) collate utf8mb4_general_ci, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t modify cc char(100) collate utf8mb4_general_ci, algorithm=instant;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t modify d char(10) collate utf8mb4_spanish_ci, algorithm=instant;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t modify dd char(10) collate utf8mb4_spanish_ci, algorithm=instant;
}
select * from t;
drop table t;


create table fully_compatible (
  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_compatible (from_charset, from_collate, to_charset, to_collate) values
  ('utf8mb3', 'utf8mb3_general_ci',           'utf8mb4', 'utf8mb4_general_ci'),
  ('utf8mb3', 'utf8mb3_bin',                  'utf8mb4', 'utf8mb4_bin'),
  ('utf8mb3', 'utf8mb3_unicode_ci',           'utf8mb4', 'utf8mb4_unicode_ci'),
  ('utf8mb3', 'utf8mb3_icelandic_ci',         'utf8mb4', 'utf8mb4_icelandic_ci'),
  ('utf8mb3', 'utf8mb3_latvian_ci',           'utf8mb4', 'utf8mb4_latvian_ci'),
  ('utf8mb3', 'utf8mb3_romanian_ci',          'utf8mb4', 'utf8mb4_romanian_ci'),
  ('utf8mb3', 'utf8mb3_slovenian_ci',         'utf8mb4', 'utf8mb4_slovenian_ci'),
  ('utf8mb3', 'utf8mb3_polish_ci',            'utf8mb4', 'utf8mb4_polish_ci'),
  ('utf8mb3', 'utf8mb3_estonian_ci',          'utf8mb4', 'utf8mb4_estonian_ci'),
  ('utf8mb3', 'utf8mb3_spanish_ci',           'utf8mb4', 'utf8mb4_spanish_ci'),
  ('utf8mb3', 'utf8mb3_swedish_ci',           'utf8mb4', 'utf8mb4_swedish_ci'),
  ('utf8mb3', 'utf8mb3_turkish_ci',           'utf8mb4', 'utf8mb4_turkish_ci'),
  ('utf8mb3', 'utf8mb3_czech_ci',             'utf8mb4', 'utf8mb4_czech_ci'),
  ('utf8mb3', 'utf8mb3_danish_ci',            'utf8mb4', 'utf8mb4_danish_ci'),
  ('utf8mb3', 'utf8mb3_lithuanian_ci',        'utf8mb4', 'utf8mb4_lithuanian_ci'),
  ('utf8mb3', 'utf8mb3_slovak_ci',            'utf8mb4', 'utf8mb4_slovak_ci'),
  ('utf8mb3', 'utf8mb3_spanish2_ci',          'utf8mb4', 'utf8mb4_spanish2_ci'),
  ('utf8mb3', 'utf8mb3_roman_ci',             'utf8mb4', 'utf8mb4_roman_ci'),
  ('utf8mb3', 'utf8mb3_persian_ci',           'utf8mb4', 'utf8mb4_persian_ci'),
  ('utf8mb3', 'utf8mb3_esperanto_ci',         'utf8mb4', 'utf8mb4_esperanto_ci'),
  ('utf8mb3', 'utf8mb3_hungarian_ci',         'utf8mb4', 'utf8mb4_hungarian_ci'),
  ('utf8mb3', 'utf8mb3_sinhala_ci',           'utf8mb4', 'utf8mb4_sinhala_ci'),
  ('utf8mb3', 'utf8mb3_german2_ci',           'utf8mb4', 'utf8mb4_german2_ci'),
  ('utf8mb3', 'utf8mb3_croatian_mysql561_ci', 'utf8mb4', 'utf8mb4_croatian_mysql561_ci'),
  ('utf8mb3', 'utf8mb3_unicode_520_ci',       'utf8mb4', 'utf8mb4_unicode_520_ci'),
  ('utf8mb3', 'utf8mb3_vietnamese_ci',        'utf8mb4', 'utf8mb4_vietnamese_ci'),
  ('utf8mb3', 'utf8mb3_croatian_ci',          'utf8mb4', 'utf8mb4_croatian_ci'),
  ('utf8mb3', 'utf8mb3_myanmar_ci',           'utf8mb4', 'utf8mb4_myanmar_ci'),
  ('utf8mb3', 'utf8mb3_thai_520_w2',          'utf8mb4', 'utf8mb4_thai_520_w2'),
  ('utf8mb3', 'utf8mb3_general_nopad_ci',     'utf8mb4', 'utf8mb4_general_nopad_ci'),
  ('utf8mb3', 'utf8mb3_nopad_bin',            'utf8mb4', 'utf8mb4_nopad_bin'),
  ('utf8mb3', 'utf8mb3_unicode_nopad_ci',     'utf8mb4', 'utf8mb4_unicode_nopad_ci'),
  ('utf8mb3', 'utf8mb3_unicode_520_nopad_ci', 'utf8mb4', 'utf8mb4_unicode_520_nopad_ci')
;

let $data_size = `select count(*) from fully_compatible`;
let $counter = 1;

while ($counter <= $data_size) {
  let $from_charset = `select from_charset from fully_compatible where id = $counter`;
  let $from_collate = `select from_collate from fully_compatible where id = $counter`;
  let $to_charset = `select to_charset from fully_compatible where id = $counter`;
  let $to_collate = `select to_collate from fully_compatible where id = $counter`;

  eval create table tmp (
    a varchar(50) charset $from_charset collate $from_collate,
    b varchar(50) charset $from_charset collate $from_collate primary key
  ) engine=innodb;

  insert into tmp values ('AAA', 'AAA'), ('bbb', 'bbb');

  eval alter table tmp
    change a a varchar(50) charset $to_charset collate $to_collate,
    modify b varchar(50) charset $to_charset collate $to_collate,
    algorithm=instant;

  check table tmp;

  drop table tmp;

  inc $counter;
}

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')
;

let $data_size = `select count(*) from compatible_without_index`;
let $counter = 1;

while ($counter <= $data_size) {
  let $from_charset = `select from_charset from compatible_without_index where id = $counter`;
  let $from_collate = `select from_collate from compatible_without_index where id = $counter`;
  let $to_charset = `select to_charset from compatible_without_index where id = $counter`;
  let $to_collate = `select to_collate from compatible_without_index where id = $counter`;

  eval create table tmp (
    a varchar(50) charset $from_charset collate $from_collate,
    b varchar(50) charset $from_charset collate $from_collate unique key,
    c varchar(50) charset $from_charset collate $from_collate primary key
  ) engine=innodb;

  eval alter table tmp
    change a a varchar(50) charset $to_charset collate $to_collate,
    algorithm=instant;

  --error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
  eval alter table tmp
    modify b varchar(50) charset $to_charset collate $to_collate,
    algorithm=instant;

  --error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
  eval alter table tmp
    modify c varchar(50) charset $to_charset collate $to_collate,
    algorithm=instant;

  drop table tmp;

  inc $counter;
}

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
  ('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', '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')
;

let $data_size = `select count(*) from fully_incompatible`;
let $counter = 1;

while ($counter <= $data_size) {
  let $from_charset = `select from_charset from fully_incompatible where id = $counter`;
  let $from_collate = `select from_collate from fully_incompatible where id = $counter`;
  let $to_charset = `select to_charset from fully_incompatible where id = $counter`;
  let $to_collate = `select to_collate from fully_incompatible where id = $counter`;

  eval create table tmp (
    a varchar(150) charset $from_charset collate $from_collate,
    b text(150) charset $from_charset collate $from_collate,
    unique key b_idx (b(150))
  ) engine=innodb;

  --error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
  eval alter table tmp
    change a a varchar(150) charset $to_charset collate $to_collate,
    algorithm=instant;

  --error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
  eval alter table tmp
    modify b text charset $to_charset collate $to_collate,
    algorithm=instant;

  drop table tmp;

  inc $counter;
}

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 corrupt 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;



--echo #
--echo # MDEV-19524 Server crashes in Bitmap<64u>::is_clear_all / Field_longstr::csinfo_change_allows_instant_alter
--echo #

CREATE TABLE t1 (a VARCHAR(1), UNIQUE(a)) ENGINE=InnoDB;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
ALTER TABLE t1 MODIFY a INT, ADD b INT, ADD UNIQUE (b), ALGORITHM=INSTANT;
DROP TABLE t1;


--echo #
--echo # MDEV-17301 Change of COLLATE unnecessarily requires ALGORITHM=COPY
--echo #

create table t (
  a char(10) collate latin1_general_ci primary key,
  b char(10) collate latin1_general_ci,
  c char(10) collate latin1_general_ci,
  unique key b_key(b)
) engine=innodb;

insert into t values
  ('aaa', 'aaa', 'aaa'), ('ccc', 'ccc', 'ccc'), ('bbb', 'bbb', 'bbb');

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t modify a char(10) collate latin1_general_cs, algorithm=inplace;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t modify b char(10) collate latin1_general_cs, algorithm=instant;
alter table t modify b char(10) collate latin1_general_cs, algorithm=nocopy;
check table t;

alter table t modify c char(10) collate latin1_general_cs, algorithm=instant;
check table t;

drop table t;

create table t (
  a varchar(10) collate latin1_general_ci primary key,
  b varchar(10) collate latin1_general_ci,
  c varchar(10) collate latin1_general_ci,
  unique key b_key(b)
) engine=innodb;

insert into t values
  ('aaa', 'aaa', 'aaa'), ('ccc', 'ccc', 'ccc'), ('bbb', 'bbb', 'bbb');

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t modify a varchar(10) collate latin1_general_cs, algorithm=inplace;

--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t modify b varchar(10) collate latin1_general_cs, algorithm=instant;
alter table t modify b varchar(10) collate latin1_general_cs, algorithm=nocopy;
check table t;

alter table t modify c varchar(10) collate latin1_general_cs, algorithm=instant;
check table t;

drop table t;

--echo #
--echo # MDEV-20726: InnoDB: Assertion failure in file data0type.cc line 67
--echo #

CREATE TABLE t (
  id int(10) unsigned NOT NULL PRIMARY KEY,
  a text CHARSET utf8mb3,
  KEY a_idx(a(1))
) ENGINE=InnoDB;

INSERT INTO t VALUES (1, 'something in the air');
ALTER TABLE t MODIFY a text CHARSET utf8mb4;

DROP TABLE t;


--echo #
--echo # MDEV-22899: Assertion `field->col->is_binary() || field->prefix_len % field->col->mbmaxlen == 0' failed in dict_index_add_to_cache
--echo #

CREATE TABLE t1 (
  a text CHARACTER SET utf8 DEFAULT NULL,
  KEY a_key (a(1))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO t1 VALUES ();
ALTER TABLE t1 MODIFY a text DEFAULT NULL;
DROP TABLE t1;

CREATE TABLE t1 (
  a text CHARACTER SET utf8 DEFAULT NULL,
  b int,
  KEY a_key (b, a(1))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO t1 VALUES ();
ALTER TABLE t1 MODIFY a text DEFAULT NULL;
DROP TABLE t1;

CREATE TABLE t1 (
  a char(200) CHARACTER SET utf8 DEFAULT NULL,
  KEY a_key (a(1))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO t1 VALUES ();
ALTER TABLE t1 MODIFY a text DEFAULT NULL;
DROP TABLE t1;

CREATE TABLE t1 (
  a char(200) CHARACTER SET utf8 DEFAULT NULL,
  b int,
  KEY a_key (b, a(1))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO t1 VALUES ();
ALTER TABLE t1 MODIFY a text DEFAULT NULL;
DROP TABLE t1;

CREATE TABLE t1 (
  a varchar(200) CHARACTER SET utf8 DEFAULT NULL,
  KEY a_key (a(1))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO t1 VALUES ();
ALTER TABLE t1 MODIFY a text DEFAULT NULL;
DROP TABLE t1;

CREATE TABLE t1 (
  a varchar(200) CHARACTER SET utf8 DEFAULT NULL,
  b int,
  KEY a_key (b, a(1))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO t1 VALUES ();
ALTER TABLE t1 MODIFY a text DEFAULT NULL;
DROP TABLE t1;

CREATE TABLE t1 (
  a varchar(2000) CHARACTER SET utf8 DEFAULT NULL,
  KEY a_key (a(1))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO t1 VALUES ();
ALTER TABLE t1 MODIFY a text DEFAULT NULL;
DROP TABLE t1;

CREATE TABLE t1 (
  a varchar(2000) CHARACTER SET utf8 DEFAULT NULL,
  b int,
  KEY a_key (b, a(1))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO t1 VALUES ();
ALTER TABLE t1 MODIFY a text DEFAULT NULL;
DROP TABLE t1;

--echo #
--echo # MDEV-23245 Still getting assertion failure in file data0type.cc line 67
--echo #

CREATE TABLE Foo
(
    Bar char(2) CHARACTER SET utf8,
    KEY Bar (Bar(1))
) ENGINE = InnoDB;
ALTER TABLE Foo MODIFY Bar char(2) CHARACTER SET utf8mb4;
INSERT INTO Foo VALUES ('a');
DROP TABLE Foo;

CREATE TABLE Foo
(
    Bar varchar(2) CHARACTER SET utf8,
    KEY Bar (Bar(1))
) ENGINE = InnoDB;
ALTER TABLE Foo MODIFY Bar varchar(2) CHARACTER SET utf8mb4;
INSERT INTO Foo VALUES ('a');
DROP TABLE Foo;

CREATE TABLE Foo
(
    Bar text CHARACTER SET utf8,
    KEY Bar (Bar(1))
) ENGINE = InnoDB;
ALTER TABLE Foo MODIFY Bar text CHARACTER SET utf8mb4;
INSERT INTO Foo VALUES ('a');
DROP TABLE Foo;

CREATE TABLE t1 (a VARCHAR(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci,
PRIMARY KEY (a(1)))
ENGINE=InnoDB;
SHOW CREATE TABLE t1;
ALTER TABLE t1 MODIFY a VARCHAR(2)
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
INSERT INTO t1 VALUES ('a');
DROP TABLE t1;


--echo #
--echo # MDEV-22775 [HY000][1553] Changing name of primary key column with foreign key constraint fails.
--echo #

create table t1 (id int primary key) engine=innodb default charset=utf8;
create table t2 (input_id int primary key, id int not null,
    key a (id),
    constraint a foreign key (id) references t1  (id)
)engine=innodb default charset=utf8;
alter table t1 change id id2 int;
drop table t2;
drop table t1;


--echo #
--echo # MDEV-25951 MariaDB crash after ALTER TABLE convert to utf8mb4
--echo #

CREATE TABLE t1 (id INT PRIMARY KEY, a VARCHAR(32), KEY (a(7))) ENGINE=INNODB DEFAULT CHARSET=UTF8MB3;
INSERT INTO t1 VALUES (1, 'a1'), (2, 'a1');

--error ER_DUP_ENTRY
ALTER TABLE t1
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci,
  ADD UNIQUE INDEX test_key (a);

ALTER TABLE t1 CONVERT TO CHARACTER SET UTF8MB4 COLLATE UTF8MB4_UNICODE_520_CI;
CHECK TABLE t1;
SELECT * FROM t1;
DROP TABLE t1;

CREATE TABLE t1 (id INT PRIMARY KEY, a CHAR(32), KEY (a(7))) ENGINE=INNODB DEFAULT CHARSET=UTF8MB3;
INSERT INTO t1 VALUES (1, 'a1'), (2, 'a1');

--error ER_DUP_ENTRY
ALTER TABLE t1
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci,
  ADD UNIQUE INDEX test_key (a);

ALTER TABLE t1 CONVERT TO CHARACTER SET UTF8MB4 COLLATE UTF8MB4_UNICODE_520_CI;
CHECK TABLE t1;
SELECT * FROM t1;
DROP TABLE t1;

[Dauer der Verarbeitung: 0.26 Sekunden, vorverarbeitet 2026-10-08]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1126864
#Domains=1897691