Files
tidb/tests/integrationtest/t/collation_misc.test

110 lines
4.1 KiB
Plaintext

set tidb_cost_model_version=1;
# ChangingCharsetToUtf8
create table t1(a varchar(20) charset utf8);
insert into t1 values ("t1_value");
alter table t1 collate uTf8mB4_uNiCoDe_Ci charset Utf8mB4 charset uTF8Mb4 collate UTF8MB4_BiN;
alter table t1 modify column a varchar(20) charset utf8mb4;
select * from t1;
create table t(a varchar(20) charset latin1);
insert into t values ("t_value");
alter table t modify column a varchar(20) charset latin1;
select * from t;
--error 8200
alter table t modify column a varchar(20) charset utf8;
drop table t;
create table t(a varchar(20) charset latin1);
insert into t values ("t_value");
alter table t modify column a varchar(20) charset utf8mb4;
admin check table t;
select * from t;
drop table t;
create table t(a varchar(20) charset latin1);
insert into t values ("t_value");
alter table t modify column a varchar(20) charset utf8mb4 collate utf8mb4_general_ci;
admin check table t;
select * from t;
drop table t;
create table t(a varchar(20) charset latin1);
insert into t values ("t_value");
--error 8200
alter table t modify column a varchar(20) charset utf8 collate utf8_bin;
--error 1273
alter table t modify column a varchar(20) charset utf8mb4 collate utf8bin;
--error 1302, 1273
alter table t collate LATIN1_GENERAL_CI charset utf8 collate utf8_bin;
--error 1253, 1273
alter table t collate LATIN1_GENERAL_CI collate UTF8MB4_UNICODE_ci collate utf8_bin;
# ChangingCharsetToUtf8 with reorg
drop table t;
create table t(a varchar(20) charset latin1);
insert into t values ("t_value");
alter table t modify column a varchar(19) charset utf8mb4;
admin check table t;
select * from t;
# TestCharsetDatabase
create database if not exists cd_test_utf8 CHARACTER SET utf8 COLLATE utf8_bin;
--error 0,1273
create database if not exists cd_test_latin1 CHARACTER SET latin1 COLLATE latin1_swedish_ci;
use cd_test_utf8;
select @@character_set_database;
select @@collation_database;
--error 0,1049
use cd_test_latin1;
select @@character_set_database;
select @@collation_database;
# DefaultDBAfterDropCurDB
--error 0,1273
create database if not exists test_db CHARACTER SET latin1 COLLATE latin1_swedish_ci;
# CollationUnion
with cte as (select cast('2010-09-09' as date) a union select '2010-09-09 ') select count(*) from cte;
# Issue26989
set names utf8mb4 collate utf8mb4_general_ci;
select position('a' in 'AA');
select locate('a', 'AA');
select locate('a', 'a');
set names utf8mb4;
# CharacterSetCollations
SELECT default_collate_name, maxlen FROM information_schema.character_sets ORDER BY character_set_name;
SELECT character_set_name, id, sortlen FROM information_schema.collations ORDER BY collation_name, id;
select * from information_schema.COLLATION_CHARACTER_SET_APPLICABILITY where COLLATION_NAME='utf8mb4_bin';
# charset
show charset;
show collation;
# Issue46690
create database if not exists cd_test_utf8mb4_0900_bin;
use cd_test_utf8mb4_0900_bin;
create table t (id varchar(255) primary key clustered, a varchar(255) collate utf8mb4_0900_bin, b varchar(255) collate utf8mb4_bin, key idx(a, b));
insert into t values ("1", "a ", "a");
select /*+USE_INDEX(t, idx)*/ * from t;
# issue 52772
drop table if exists t1;
drop table if exists t2;
create table t1(code varchar(32)) CHARSET=utf8 COLLATE=utf8_general_ci;
create table t2(code varchar(32)) CHARSET=utf8 COLLATE=utf8_bin;
explain format='plan_tree' select * from t1 join t2 on t1.code=t2.code and t1.code in ('1') and t2.code in ('1');
# for constant prepagation
drop table if exists t1;
drop table if exists t2;
create table t1(id_ci varchar(10) charset utf8mb4 collate utf8mb4_general_ci, id_bin varchar(10) charset utf8mb4 collate utf8mb4_bin);
create table t2(id_ci varchar(10) charset utf8mb4 collate utf8mb4_general_ci, id_bin varchar(10) charset utf8mb4 collate utf8mb4_bin);
insert into t1 values('a','A');
insert into t2 values('A','A');
select * from t1 join t2 on t1.id_ci = t2.id_ci;
explain format='plan_tree' select * from t1 join t2 on t1.id_ci = t2.id_ci;
select * from t1 join t2 on t1.id_ci = t2.id_ci where t1.id_ci in (t2.id_ci, t2.id_bin);
explain format='plan_tree' select * from t1 join t2 on t1.id_ci = t2.id_ci where t1.id_ci in (t2.id_ci, t2.id_bin);