Commit 13344682 authored by Alexander Barkov's avatar Alexander Barkov Committed by Oleksandr Byelkin

MDEV-27009 Add UCA-14.0.0 collations

- Added one neutral and 22 tailored (language specific) collations based on
  Unicode Collation Algorithm version 14.0.0.

  Collations were added for Unicode character sets
  utf8mb3, utf8mb4, ucs2, utf16, utf32.

  Every tailoring was added with four accent and case
  sensitivity flag combinations, e.g:

  * utf8mb4_uca1400_swedish_as_cs
  * utf8mb4_uca1400_swedish_as_ci
  * utf8mb4_uca1400_swedish_ai_cs
  * utf8mb4_uca1400_swedish_ai_ci

  and their _nopad_ variants:

  * utf8mb4_uca1400_swedish_nopad_as_cs
  * utf8mb4_uca1400_swedish_nopad_as_ci
  * utf8mb4_uca1400_swedish_nopad_ai_cs
  * utf8mb4_uca1400_swedish_nopad_ai_ci

- Introducing a conception of contextually typed named collations:

  CREATE DATABASE db1 CHARACTER SET utf8mb4;
  CREATE TABLE db1.t1 (a CHAR(10) COLLATE uca1400_as_ci);

  The idea is that there is no a need to specify the character set prefix
  in the new collation names. It's enough to type just the suffix
  "uca1400_as_ci". The character set is taken from the context.

  In the above example script the context character set is utf8mb4.
  So the CREATE TABLE will make a column with the collation
  utf8mb4_uca1400_as_ci.

  Short collations names can be used in any parts of the SQL syntax
  where the COLLATE clause is understood.

- New collations are displayed only one time
  (without character set combinations) by these statements:

     SELECT * FROM INFORMATION_SCHEMA.COLLATIONS;
     SHOW COLLATION;

  For example, all these collations:
  - utf8mb3_uca1400_swedish_as_ci
  - utf8mb4_uca1400_swedish_as_ci
  - ucs2_uca1400_swedish_as_ci
  - utf16_uca1400_swedish_as_ci
  - utf32_uca1400_swedish_as_ci
  have just one entry in INFORMATION_SCHEMA.COLLATIONS and SHOW COLLATION,
  with COLLATION_NAME equal to "uca1400_swedish_as_ci", which is the suffix
  without the character set name:

SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS
WHERE COLLATION_NAME LIKE '%uca1400_swedish_as_ci';

+-----------------------+
| COLLATION_NAME        |
+-----------------------+
| uca1400_swedish_as_ci |
+-----------------------+

  Note, the behaviour of old collations did not change.
  Non-unicode collations (e.g. latin1_swedish_ci) and
  old UCA-4.0.0 collations (e.g. utf8mb4_unicode_ci)
  are still displayed with the character set prefix, as before.

- The structure of the table INFORMATION_SCHEMA.COLLATIONS was changed.

  The NOT NULL constraint was removed from these columns:
  - CHARACTER_SET_NAME
  - ID
  - IS_DEFAULT
  and from the corresponding columns in SHOW COLLATION.

  For example:

SELECT COLLATION_NAME, CHARACTER_SET_NAME, ID, IS_DEFAULT
FROM INFORMATION_SCHEMA.COLLATIONS
WHERE COLLATION_NAME LIKE '%uca1400_swedish_as_ci';
+-----------------------+--------------------+------+------------+
| COLLATION_NAME        | CHARACTER_SET_NAME | ID   | IS_DEFAULT |
+-----------------------+--------------------+------+------------+
| uca1400_swedish_as_ci | NULL               | NULL | NULL       |
+-----------------------+--------------------+------+------------+

  The NULL value in these columns now means that the collation
  is applicable to multiple character sets.
  The behavioir of old collations did not change.
  Make sure your client programs can handle NULL values in these columns.

- The structure of the table
  INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY was changed.

  Three new NOT NULL columns were added:
  - FULL_COLLATION_NAME
  - ID
  - IS_DEFAULT

  New collations have multiple entries in COLLATION_CHARACTER_SET_APPLICABILITY.
  The column COLLATION_NAME contains the collation name without the character
  set prefix. The column FULL_COLLATION_NAME contains the collation name with
  the character set prefix.

  Old collations have full collation name in both FULL_COLLATION_NAME and
  COLLATION_NAME.

SELECT COLLATION_NAME, FULL_COLLATION_NAME, CHARACTER_SET_NAME, ID, IS_DEFAULT
FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
WHERE FULL_COLLATION_NAME RLIKE '^(utf8mb4|latin1).*swedish.*ci$';
+-----------------------------+-------------------------------------+--------------------+------+------------+
| COLLATION_NAME              | FULL_COLLATION_NAME                 | CHARACTER_SET_NAME | ID   | IS_DEFAULT |
+-----------------------------+-------------------------------------+--------------------+------+------------+
| latin1_swedish_ci           | latin1_swedish_ci                   | latin1             |    8 | Yes        |
| latin1_swedish_nopad_ci     | latin1_swedish_nopad_ci             | latin1             | 1032 |            |
| utf8mb4_swedish_ci          | utf8mb4_swedish_ci                  | utf8mb4            |  232 |            |
| uca1400_swedish_ai_ci       | utf8mb4_uca1400_swedish_ai_ci       | utf8mb4            | 2368 |            |
| uca1400_swedish_as_ci       | utf8mb4_uca1400_swedish_as_ci       | utf8mb4            | 2370 |            |
| uca1400_swedish_nopad_ai_ci | utf8mb4_uca1400_swedish_nopad_ai_ci | utf8mb4            | 2372 |            |
| uca1400_swedish_nopad_as_ci | utf8mb4_uca1400_swedish_nopad_as_ci | utf8mb4            | 2374 |            |
+-----------------------------+-------------------------------------+--------------------+------+------------+

- Other INFORMATION_SCHEMA queries:

  SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLUMNS;
  SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.PARAMETERS;
  SELECT TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES;
  SELECT DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA;
  SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.ROUTINES;
  SELECT COLLATION_CONNECTION FROM INFORMATION_SCHEMA.EVENTS;
  SELECT DATABASE_COLLATION FROM INFORMATION_SCHEMA.EVENTS;
  SELECT COLLATION_CONNECTION FROM INFORMATION_SCHEMA.ROUTINES;
  SELECT DATABASE_COLLATION FROM INFORMATION_SCHEMA.ROUTINES;
  SELECT COLLATION_CONNECTION FROM INFORMATION_SCHEMA.TRIGGERS;
  SELECT DATABASE_COLLATION FROM INFORMATION_SCHEMA.TRIGGERS;
  SELECT COLLATION_CONNECTION FROM INFORMATION_SCHEMA.VIEWS;

  display full collation names, including character sets prefix,
  for all collations, including new collations.

  Corresponding SHOW commands also display full collation names
  in collation related columns:

  SHOW CREATE TABLE t1;
  SHOW CREATE DATABASE db1;
  SHOW TABLE STATUS;
  SHOW CREATE FUNCTION f1;
  SHOW CREATE PROCEDURE p1;
  SHOW CREATE EVENT ev1;
  SHOW CREATE TRIGGER tr1;
  SHOW CREATE VIEW;

  These INFORMATION_SCHEMA queries and SHOW statements may change in
  the future, to display show collation names.
parent 6bc10f80
......@@ -616,6 +616,8 @@ scripts/mariadb-setpermission
sql/mariadbd
sql/mariadb-tzinfo-to-sql
storage/rocksdb/mariadb-ldb
strings/ctype-uca1400data.h
strings/uca-dump
tests/mariadb-client-test
versioninfo_dll.rc
versioninfo_exe.rc
......
......@@ -2581,7 +2581,7 @@ static uint dump_events_for_db(char *db)
MYSQL_RES *event_res, *event_list_res;
MYSQL_ROW row, event_list_row;
char db_cl_name[MY_CS_NAME_SIZE];
char db_cl_name[MY_CS_COLLATION_NAME_SIZE];
int db_cl_altered= FALSE;
DBUG_ENTER("dump_events_for_db");
......@@ -2801,7 +2801,7 @@ static uint dump_routines_for_db(char *db)
FILE *sql_file= md_result_file;
MYSQL_ROW row, routine_list_row;
char db_cl_name[MY_CS_NAME_SIZE];
char db_cl_name[MY_CS_COLLATION_NAME_SIZE];
int db_cl_altered= FALSE;
// before 10.3 packages are not supported
uint upper_bound= mysql_get_server_version(mysql) >= 100300 ?
......@@ -3844,7 +3844,7 @@ static int dump_triggers_for_table(char *table_name, char *db_name)
MYSQL_ROW row;
FILE *sql_file= md_result_file;
char db_cl_name[MY_CS_NAME_SIZE];
char db_cl_name[MY_CS_COLLATION_NAME_SIZE];
int ret= TRUE;
/* Servers below 5.1.21 do not support SHOW CREATE TRIGGER */
const int use_show_create_trigger= mysql_get_server_version(mysql) >= 50121;
......
......@@ -34,7 +34,9 @@ enum loglevel {
extern "C" {
#endif
#define MY_CS_NAME_SIZE 32
#define MY_CS_CHARACTER_SET_NAME_SIZE 32
#define MY_CS_COLLATION_NAME_SIZE 64
#define MY_CS_CTYPE_TABLE_SIZE 257
#define MY_CS_TO_LOWER_TABLE_SIZE 256
#define MY_CS_TO_UPPER_TABLE_SIZE 256
......@@ -116,7 +118,7 @@ extern MY_UNICASE_INFO my_unicase_unicode520;
*/
#define MY_UCA_MAX_WEIGHT_SIZE (8+1) /* Including 0 terminator */
#define MY_UCA_CONTRACTION_MAX_WEIGHT_SIZE (2*8+1) /* Including 0 terminator */
#define MY_UCA_WEIGHT_LEVELS 2
#define MY_UCA_WEIGHT_LEVELS 3
typedef struct my_contraction_t
{
......@@ -240,6 +242,46 @@ typedef enum enum_repertoire_t
} my_repertoire_t;
/* ID compatibility */
typedef enum enum_collation_id_type
{
MY_COLLATION_ID_TYPE_PRECISE= 0,
MY_COLLATION_ID_TYPE_COMPAT_100800= 1
} my_collation_id_type_t;
/* Collation name display modes */
typedef enum enum_collation_name_mode
{
MY_COLLATION_NAME_MODE_FULL= 0,
MY_COLLATION_NAME_MODE_CONTEXT= 1
} my_collation_name_mode_t;
/* Level flags */
#define MY_CS_LEVEL_BIT_PRIMARY 0x00
#define MY_CS_LEVEL_BIT_SECONDARY 0x01
#define MY_CS_LEVEL_BIT_TERTIARY 0x02
#define MY_CS_LEVEL_BIT_QUATERNARY 0x03
#define MY_CS_COLL_LEVELS_S1 (1<<MY_CS_LEVEL_BIT_PRIMARY)
#define MY_CS_COLL_LEVELS_AI_CS (1<<MY_CS_LEVEL_BIT_PRIMARY)| \
(1<<MY_CS_LEVEL_BIT_TERTIARY)
#define MY_CS_COLL_LEVELS_S2 (1<<MY_CS_LEVEL_BIT_PRIMARY)| \
(1<<MY_CS_LEVEL_BIT_SECONDARY)
#define MY_CS_COLL_LEVELS_S3 (1<<MY_CS_LEVEL_BIT_PRIMARY)| \
(1<<MY_CS_LEVEL_BIT_SECONDARY) | \
(1<<MY_CS_LEVEL_BIT_TERTIARY)
#define MY_CS_COLL_LEVELS_S4 (1<<MY_CS_LEVEL_BIT_PRIMARY)| \
(1<<MY_CS_LEVEL_BIT_SECONDARY) | \
(1<<MY_CS_LEVEL_BIT_TERTIARY) | \
(1<<MY_CS_LEVEL_BIT_QUATERNARY)
/* Flags for strxfrm */
#define MY_STRXFRM_LEVEL1 0x00000001 /* for primary weights */
#define MY_STRXFRM_LEVEL2 0x00000002 /* for secondary weights */
......@@ -440,8 +482,13 @@ struct my_collation_handler_st
*/
size_t (*min_str)(CHARSET_INFO *cs, uchar *dst, size_t dstlen, size_t nchars);
size_t (*max_str)(CHARSET_INFO *cs, uchar *dst, size_t dstlen, size_t nchars);
uint (*get_id)(CHARSET_INFO *cs, my_collation_id_type_t type);
LEX_CSTRING (*get_collation_name)(CHARSET_INFO *cs,
my_collation_name_mode_t mode);
};
extern MY_COLLATION_HANDLER my_collation_8bit_bin_handler;
extern MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler;
extern MY_COLLATION_HANDLER my_collation_8bit_nopad_bin_handler;
......@@ -843,6 +890,21 @@ struct charset_info_st
}
/* Collation routines */
uint default_flag() const
{
return state & MY_CS_PRIMARY;
}
uint binsort_flag() const
{
return state & MY_CS_BINSORT;
}
uint compiled_flag() const
{
return state & MY_CS_COMPILED;
}
int strnncoll(const uchar *a, size_t alen,
const uchar *b, size_t blen, my_bool b_is_prefix= FALSE) const
{
......@@ -940,6 +1002,15 @@ struct charset_info_st
return (coll->max_str)(this, dst, dstlen, nchars);
}
uint get_id(my_collation_id_type_t type) const
{
return (coll->get_id)(this, type);
}
LEX_CSTRING get_collation_name(my_collation_name_mode_t mode) const
{
return (coll->get_collation_name)(this, mode);
}
#endif /* __cplusplus */
};
......@@ -1520,6 +1591,9 @@ extern size_t my_strcspn(CHARSET_INFO *cs, const char *str, const char *end,
my_bool my_propagate_simple(CHARSET_INFO *cs, const uchar *str, size_t len);
my_bool my_propagate_complex(CHARSET_INFO *cs, const uchar *str, size_t len);
uint my_ci_get_id_generic(CHARSET_INFO *cs, my_collation_id_type_t type);
LEX_CSTRING my_ci_get_collation_name_generic(CHARSET_INFO *cs,
my_collation_name_mode_t mode);
typedef struct
{
......@@ -1534,7 +1608,7 @@ my_repertoire_t my_string_repertoire(CHARSET_INFO *cs,
my_bool my_charset_is_ascii_based(CHARSET_INFO *cs);
my_repertoire_t my_charset_repertoire(CHARSET_INFO *cs);
uint my_strxfrm_flag_normalize(uint flags, uint nlevels);
uint my_strxfrm_flag_normalize(CHARSET_INFO *cs, uint flags);
void my_strxfrm_desc_and_reverse(uchar *str, uchar *strend,
uint flags, uint level);
size_t my_strxfrm_pad_desc_and_reverse(CHARSET_INFO *cs,
......
......@@ -243,7 +243,7 @@ extern void (*proc_info_hook)(void *, const PSI_stage_info *, PSI_stage_info *,
const char *, const char *, const unsigned int);
/* charsets */
#define MY_ALL_CHARSETS_SIZE 2048
#define MY_ALL_CHARSETS_SIZE 4096
extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *default_charset_info;
extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *all_charsets[MY_ALL_CHARSETS_SIZE];
extern struct charset_info_st compiled_charsets[];
......@@ -1112,4 +1112,135 @@ void my_init_mysys_psi_keys(void);
struct st_mysql_file;
extern struct st_mysql_file *mysql_stdin;
C_MODE_END
#ifdef __cplusplus
class Charset_loader_mysys: public MY_CHARSET_LOADER
{
public:
Charset_loader_mysys()
{
my_charset_loader_init_mysys(this);
}
/**
Get a CHARSET_INFO by a character set name.
@param name Collation name
@param cs_flags e.g. MY_CS_PRIMARY, MY_CS_BINARY
@param my_flags mysys flags (MY_WME, MY_UTF8_IS_UTF8MB3)
@return
@retval NULL on error (e.g. not found)
@retval A CHARSET_INFO pointter on success
*/
CHARSET_INFO *get_charset(const char *cs_name, uint cs_flags, myf my_flags)
{
error[0]= '\0'; // Need to clear in case of the second call
return my_charset_get_by_name(this, cs_name, cs_flags, my_flags);
}
/**
Get a CHARSET_INFO by an exact collation by name.
@param name Collation name
@param my_flags e.g. the utf8 translation flag
@return
@retval NULL on error (e.g. not found)
@retval A CHARSET_INFO pointter on success
*/
CHARSET_INFO *get_exact_collation(const char *name, myf my_flags)
{
error[0]= '\0'; // Need to clear in case of the second call
return my_collation_get_by_name(this, name, my_flags);
}
/**
Get a CHARSET_INFO by a context collation by name.
The returned pointer must be further resolved to a character set.
@param name Collation name
@param utf8_flag The utf8 translation flag
@return
@retval NULL on error (e.g. not found)
@retval A CHARSET_INFO pointter on success
*/
CHARSET_INFO *get_context_collation(const char *name, myf my_flags)
{
return get_exact_collation_by_context_name(&my_charset_utf8mb4_general_ci,
name, my_flags);
}
/**
Get an exact CHARSET_INFO by a contextually typed collation name.
@param name Collation name
@param utf8_flag The utf8 translation flag
@return
@retval NULL on error (e.g. not found)
@retval A CHARSET_INFO pointer on success
*/
CHARSET_INFO *get_exact_collation_by_context_name(CHARSET_INFO *cs,
const char *name,
myf my_flags)
{
char tmp[MY_CS_COLLATION_NAME_SIZE];
my_snprintf(tmp, sizeof(tmp), "%s_%s", cs->cs_name.str, name);
return get_exact_collation(tmp, my_flags);
}
/*
Find a collation with binary comparison rules
*/
CHARSET_INFO *get_bin_collation(CHARSET_INFO *cs, myf my_flags)
{
/*
We don't need to handle old_mode=UTF8_IS_UTF8MB3 here,
This method assumes that "cs" points to a real character set name.
It can be either "utf8mb3" or "utf8mb4". It cannot be "utf8".
No thd->get_utf8_flag() flag passed to get_charset_by_csname().
*/
DBUG_ASSERT(cs->cs_name.length !=4 || memcmp(cs->cs_name.str, "utf8", 4));
/*
CREATE TABLE t1 (a CHAR(10) BINARY)
CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
Nothing to do, we have the binary collation already.
*/
if (cs->state & MY_CS_BINSORT)
return cs;
// CREATE TABLE t1 (a CHAR(10) BINARY) CHARACTER SET utf8mb4;/
error[0]= '\0'; // Need in case of the second execution
return get_charset(cs->cs_name.str, MY_CS_BINSORT, my_flags);
}
/*
Find the default collation in the given character set
*/
CHARSET_INFO *get_default_collation(CHARSET_INFO *cs, myf my_flags)
{
// See comments in find_bin_collation_or_error()
DBUG_ASSERT(cs->cs_name.length !=4 || memcmp(cs->cs_name.str, "utf8", 4));
/*
CREATE TABLE t1 (a CHAR(10) COLLATE DEFAULT) CHARACTER SET utf8mb4;
Nothing to do, we have the default collation already.
*/
if (cs->state & MY_CS_PRIMARY)
return cs;
/*
CREATE TABLE t1 (a CHAR(10) COLLATE DEFAULT)
CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
Don't need to handle old_mode=UTF8_IS_UTF8MB3 here.
See comments in find_bin_collation_or_error.
*/
cs= get_charset(cs->cs_name.str, MY_CS_PRIMARY, my_flags);
DBUG_ASSERT(cs);
return cs;
}
};
#endif /*__cplusplus */
#endif /* _my_sys_h */
......@@ -1097,13 +1097,15 @@ bool Protocol_text::store_field_metadata(const THD * thd,
if (charset_for_protocol == &my_charset_bin || thd_cs == NULL)
{
/* No conversion */
client_field->charsetnr= charset_for_protocol->number;
client_field->charsetnr= charset_for_protocol->
get_id(MY_COLLATION_ID_TYPE_COMPAT_100800);
client_field->length= server_field.length;
}
else
{
/* With conversion */
client_field->charsetnr= thd_cs->number;
client_field->charsetnr= thd_cs->
get_id(MY_COLLATION_ID_TYPE_COMPAT_100800);
client_field->length= server_field.max_octet_length(charset_for_protocol,
thd_cs);
}
......
--disable_ps_protocol
--enable_metadata
DELIMITER $$;
FOR rec IN (SELECT COLLATION_NAME
FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
WHERE CHARACTER_SET_NAME=@charset
AND COLLATION_NAME RLIKE 'uca1400'
ORDER BY ID)
DO
SET NAMES utf8mb4;
SET character_set_results=NULL;
EXECUTE IMMEDIATE CONCAT('SELECT CONVERT('''' USING ',@charset,')',
' COLLATE ', rec.COLLATION_NAME,
' AS ', rec.COLLATION_NAME,
' LIMIT 0');
END FOR;
$$
DELIMITER ;$$
--disable_metadata
--enable_ps_protocol
SET NAMES utf8;
--disable_ps_protocol
--enable_metadata
DELIMITER $$;
FOR rec IN (SELECT COLLATION_NAME
FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
WHERE CHARACTER_SET_NAME=@charset
AND COLLATION_NAME RLIKE 'uca1400'
ORDER BY ID)
DO
EXECUTE IMMEDIATE CONCAT('SET NAMES ',@charset,' COLLATE ', rec.COLLATION_NAME);
SELECT rec.COLLATION_NAME;
END FOR;
$$
DELIMITER ;$$
--disable_metadata
--enable_ps_protocol
......@@ -1120,7 +1120,7 @@ show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`CHARACTER_SET_NAME` varchar(32) NOT NULL,
`DEFAULT_COLLATE_NAME` varchar(32) NOT NULL,
`DEFAULT_COLLATE_NAME` varchar(64) NOT NULL,
`DESCRIPTION` varchar(60) NOT NULL,
`MAXLEN` bigint(3) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -9,7 +9,9 @@ INSERT INTO t0 VALUES
('COLLATE DEFAULT'),
('COLLATE utf8mb4_bin'),
('COLLATE latin1_swedish_ci'),
('COLLATE latin1_bin');
('COLLATE latin1_bin'),
('COLLATE uca1400_ai_ci'),
('COLLATE uca1400_as_ci');
CREATE TABLE clauses
(
......
......@@ -636,3 +636,33 @@ SELECT * FROM t1 WHERE phone='123' ORDER BY BINARY phone;
SELECT * FROM t1 WHERE phone<>'123' ORDER BY BINARY phone;
SELECT phone, HEX(WEIGHT_STRING(phone)) FROM t1 ORDER BY phone, BINARY phone;
DROP TABLE t1;
--echo #
--echo # MDEV-27009 Add UCA-14.0.0 collations
--echo #
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci, comment VARCHAR(128));
INSERT INTO t1 VALUES ('a', '0061 LATIN SMALL LETTER A');
INSERT INTO t1 VALUES ('c', '0063 LATIN SMALL LETTER C');
INSERT INTO t1 VALUES ('à', '00E0 LATIN SMALL LETTER A WITH GRAVE');
INSERT INTO t1 VALUES ('ć', '0107 LATIN SMALL LETTER C WITH ACUTE');
INSERT INTO t1 VALUES (_ucs2 0x0439, '0439 CYRILLIC SMALL LETTER SHORT I - precomposed');
INSERT INTO t1 VALUES (_ucs2 0x04380306, '0438 0306 CYRILLIC SMALL LETTER SHORT I - contraction');
INSERT INTO t1 VALUES (_ucs2 0x0CCB, '0CCB KANNADA VOWEL SIGN OO - precomposed');
INSERT INTO t1 VALUES (_ucs2 0x0CC60CC20CD5, '0CC6 0CC2 0CD5 KANNADA VOWEL SIGN OO - contraction');
--vertical_results
SELECT
'---' AS `---`,
comment,
HEX(a),
HEX(WEIGHT_STRING(a)),
HEX(WEIGHT_STRING(a LEVEL 1)),
HEX(WEIGHT_STRING(a LEVEL 2)),
WEIGHT_STRING(a LEVEL 1)=WEIGHT_STRING(a COLLATE utf8mb4_unicode_ci) AS is_400,
WEIGHT_STRING(a LEVEL 1)=WEIGHT_STRING(a COLLATE utf8mb4_unicode_520_ci) AS is_520,
WEIGHT_STRING(a LEVEL 1)=WEIGHT_STRING(a COLLATE utf8mb4_uca1400_ai_ci) AS is_1400
FROM t1
ORDER BY a, HEX(a);
--horizontal_results
DROP TABLE t1;
This diff is collapsed.
......@@ -23,3 +23,21 @@ SET NAMES utf8;
--echo #
--echo # End of 10.2 tests
--echo #
--echo #
--echo # Start of 10.9 tests
--echo #
--echo #
--echo # MDEV-27009 Add UCA-14.0.0 collations
--echo # Collation IDs in the protocol
--echo #
SET @charset='ucs2';
--source include/ctype_uca1400_ids_using_convert.inc
--echo #
--echo # End of 10.9 tests
--echo #
This diff is collapsed.
......@@ -267,7 +267,25 @@ INSERT INTO t1 (c) VALUES (1);
SELECT HEX(c) FROM t1;
DROP TABLE t1;
SET NAMES utf8;
--echo #
--echo # End of 10.2 tests
--echo #
--echo #
--echo # Start of 10.9 tests
--echo #
--echo #
--echo # MDEV-27009 Add UCA-14.0.0 collations
--echo # Collation IDs in the protocol
--echo #
SET @charset='utf16';
--source include/ctype_uca1400_ids_using_convert.inc
--echo #
--echo # End of 10.9 tests
--echo #
This diff is collapsed.
......@@ -321,7 +321,25 @@ SET @@SESSION.collation_connection=utf32_estonian_ci;
CREATE TABLE t1(c1 SET('a') COLLATE 'Binary',c2 JSON);
SHOW CREATE TABLE t1;
DROP TABLE t1;
SET NAMES utf8;
--echo #
--echo # End of 10.4 tests
--echo #
--echo #
--echo # Start of 10.9 tests
--echo #
--echo #
--echo # MDEV-27009 Add UCA-14.0.0 collations
--echo # Collation IDs in the protocol
--echo #
SET @charset='utf32';
--source include/ctype_uca1400_ids_using_convert.inc
--echo #
--echo # End of 10.9 tests
--echo #
This diff is collapsed.
......@@ -21,3 +21,21 @@ SET NAMES utf8 COLLATE utf8_unicode_nopad_ci;
--echo #
--echo # End of 10.2 tests
--echo #
--echo #
--echo # Start of 10.9 tests
--echo #
--echo #
--echo # MDEV-27009 Add UCA-14.0.0 collations
--echo # Collation IDs in the protocol
--echo #
SET NAMES utf8mb3;
SET @charset=(SELECT @@character_set_client);
--source include/ctype_uca1400_ids_using_set_names.inc
--echo #
--echo # End of 10.9 tests
--echo #
......@@ -2109,4 +2109,3 @@ DROP TABLE t1;
--echo #
--echo # End of 10.6 tests
--echo #
This diff is collapsed.
......@@ -108,3 +108,294 @@ SET NAMES utf8mb4;
--echo #
--echo # End of 10.2 tests
--echo #
--echo #
--echo # End of 10.9 tests
--echo #
--echo #
--echo # MDEV-27009 Add UCA-14.0.0 collations
--echo # Collation IDs in the protocol
--echo #
SET NAMES utf8mb4;
SET @charset=(SELECT @@character_set_client);
--source include/ctype_uca1400_ids_using_set_names.inc
--echo #
--echo # MDEV-27009 Add UCA-14.0.0 collations
--echo # SET NAMES CHARACTER SET cs [COLLATE cl]
--echo #
CREATE VIEW vars AS
SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE variable_name IN
('character_set_client','character_set_connection','character_set_results',
'collation_connection') ORDER BY variable_name;
--echo ---
SET NAMES DEFAULT COLLATE DEFAULT;
SELECT * FROM vars;
--echo ---
--error ER_COLLATION_CHARSET_MISMATCH
SET NAMES DEFAULT COLLATE `binary`;
SELECT * FROM vars;
--echo ---
--error ER_COLLATION_CHARSET_MISMATCH
SET NAMES DEFAULT COLLATE utf8mb4_uca1400_ai_ci;
SELECT * FROM vars;
--echo ---
--error ER_COLLATION_CHARSET_MISMATCH
SET NAMES DEFAULT COLLATE uca1400_ai_ci;
SELECT * FROM vars;
--echo ---
SET NAMES utf8mb4;
SELECT * FROM vars;
--echo ---
--error ER_COLLATION_CHARSET_MISMATCH
SET NAMES utf8mb4 COLLATE `binary`;
SELECT * FROM vars;
--echo ---
SET NAMES utf8mb4 COLLATE DEFAULT;
SELECT * FROM vars;
--echo ---
SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
SELECT * FROM vars;
--echo ---
SET NAMES utf8mb4 COLLATE uca1400_ai_ci;
SELECT * FROM vars;
DROP VIEW vars;
--echo #
--echo # MDEV-27009 Add UCA-14.0.0 collations
--echo # ALTER TABLE t1 CONVERT TO CHARACTER SET cs [COLLATE cl]
--echo #
CREATE DATABASE db1 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
USE db1;
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT COLLATE DEFAULT;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
--error ER_COLLATION_CHARSET_MISMATCH
ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT COLLATE latin1_bin;
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT COLLATE utf8mb4_uca1400_ai_ci;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT COLLATE uca1400_ai_ci;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4 COLLATE DEFAULT;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
--error ER_COLLATION_CHARSET_MISMATCH
ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4 COLLATE latin1_bin;
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci;
SHOW CREATE TABLE t1;
DROP TABLE t1;
DROP DATABASE db1;
USE test;
--echo #
--echo # MDEV-27743 Remove Lex::charset
--echo # MDEV-27009 Add UCA-14.0.0 collations
--echo #
CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET utf8mb4);
INSERT INTO t1 VALUES ('A'),('a'),('Á'),('á');
--error ER_PARSE_ERROR
SELECT * FROM t1 ORDER BY c1 COLLATE DEFAULT;
--error ER_COLLATION_CHARSET_MISMATCH
SELECT * FROM t1 ORDER BY c1 COLLATE `binary`;
SELECT * FROM t1 ORDER BY c1 COLLATE utf8mb4_uca1400_as_cs;
EXPLAIN EXTENDED SELECT * FROM t1 ORDER BY c1 COLLATE utf8mb4_uca1400_as_cs;
SELECT * FROM t1 ORDER BY c1 COLLATE uca1400_as_cs;
EXPLAIN EXTENDED SELECT * FROM t1 ORDER BY c1 COLLATE uca1400_as_cs;
DROP TABLE t1;
--echo #
--echo # MDEV-27009 Add UCA-14.0.0 collations
--echo # CREATE DATABASE
--echo #
SET @@collation_server=utf8mb4_bin;
CREATE DATABASE db1;
SHOW CREATE DATABASE db1;
DROP DATABASE db1;
CREATE DATABASE db1 COLLATE DEFAULT;
SHOW CREATE DATABASE db1;
DROP DATABASE db1;
CREATE DATABASE db1 COLLATE uca1400_ai_ci;
SHOW CREATE DATABASE db1;
DROP DATABASE db1;
CREATE DATABASE db1 COLLATE utf8mb4_uca1400_ai_ci;
SHOW CREATE DATABASE db1;
DROP DATABASE db1;
CREATE DATABASE db1 CHARACTER SET DEFAULT;
SHOW CREATE DATABASE db1;
DROP DATABASE db1;
CREATE DATABASE db1 CHARACTER SET DEFAULT COLLATE DEFAULT;
SHOW CREATE DATABASE db1;
DROP DATABASE db1;
CREATE DATABASE db1 CHARACTER SET DEFAULT COLLATE uca1400_ai_ci;
SHOW CREATE DATABASE db1;
DROP DATABASE db1;
CREATE DATABASE db1 CHARACTER SET DEFAULT COLLATE utf8mb4_uca1400_ai_ci;
SHOW CREATE DATABASE db1;
DROP DATABASE db1;
SET @@collation_server=DEFAULT;
SET @@collation_server=latin1_bin;
--error ER_COLLATION_CHARSET_MISMATCH
CREATE DATABASE db1 COLLATE uca1400_ai_ci;
--error ER_COLLATION_CHARSET_MISMATCH
CREATE DATABASE db1 CHARACTER SET DEFAULT COLLATE uca1400_ai_ci;
CREATE DATABASE db1 CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci;
SHOW CREATE DATABASE db1;
DROP DATABASE db1;
SET @@collation_server=DEFAULT;
--echo #
--echo # MDEV-27009 Add UCA-14.0.0 collations
--echo # CREATE TABLE - table level character set and collation
--echo #
SELECT @@collation_database;
CREATE DATABASE db1 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE TABLE db1.t1 (a CHAR(1));
SHOW CREATE TABLE db1.t1;
DROP TABLE db1.t1;
CREATE TABLE db1.t1 (a CHAR(1)) COLLATE DEFAULT;
SHOW CREATE TABLE db1.t1;
DROP TABLE db1.t1;
CREATE TABLE db1.t1 (a CHAR(1)) COLLATE uca1400_ai_ci;
SHOW CREATE TABLE db1.t1;
DROP TABLE db1.t1;
CREATE TABLE db1.t1 (a CHAR(1)) COLLATE utf8mb4_uca1400_ai_ci;
SHOW CREATE TABLE db1.t1;
DROP TABLE db1.t1;
CREATE TABLE db1.t1 (a CHAR(1)) CHARACTER SET DEFAULT;
SHOW CREATE TABLE db1.t1;
DROP TABLE db1.t1;
CREATE TABLE db1.t1 (a CHAR(1)) CHARACTER SET DEFAULT COLLATE DEFAULT;
SHOW CREATE TABLE db1.t1;
DROP TABLE db1.t1;
CREATE TABLE db1.t1 (a CHAR(1)) CHARACTER SET DEFAULT COLLATE uca1400_ai_ci;
SHOW CREATE TABLE db1.t1;
DROP TABLE db1.t1;
CREATE TABLE db1.t1 (a CHAR(1)) CHARACTER SET DEFAULT COLLATE utf8mb4_uca1400_ai_ci;
SHOW CREATE TABLE db1.t1;
DROP TABLE db1.t1;
DROP DATABASE db1;
--echo #
--echo # MDEV-27009 Add UCA-14.0.0 collations
--echo #
SET NAMES utf8mb4;
DELIMITER $$;
CREATE PROCEDURE exec_verbose(query TEXT CHARACTER SET utf8mb4)
BEGIN
SELECT query AS ``;
EXECUTE IMMEDIATE query;
END;
$$
CREATE PROCEDURE test_styles(clname VARCHAR(64) CHARACTER SET utf8mb4,
where_clause TEXT CHARACTER SET utf8mb4)
BEGIN
DECLARE query TEXT CHARACTER SET utf8mb4 DEFAULT
'SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),'','') '
'FROM t1 <WHERE> GROUP BY a COLLATE <CL>';
SET query=REPLACE(query, '<WHERE>', where_clause);
CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_nopad_as_cs')));
CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_as_cs')));
CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_nopad_as_ci')));
CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_as_ci')));
CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_nopad_ai_cs')));
CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_ai_cs')));
CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_nopad_ai_ci')));
CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_ai_ci')));
END;
$$
DELIMITER ;$$
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8mb4);
--source include/ctype_unicode_latin.inc
INSERT INTO t1 VALUES('ẞ');
INSERT INTO t1 SELECT CONCAT(a,' ') FROM t1;
CALL test_styles('uca1400', '');
CALL test_styles('uca1400', _utf8mb4"WHERE BINARY(LOWER(TRIM(a))) IN ('ss','s','ß','ẞ')");
CALL test_styles('uca1400_danish', _utf8mb4"WHERE BINARY(LOWER(TRIM(a))) IN ('aa','å')");
DROP TABLE t1;
DROP PROCEDURE exec_verbose;
DROP PROCEDURE test_styles;
--echo #
--echo # End of 10.9 tests
--echo #
#
# Start of 10.8 tests
#
#
# MDEV-27009 Add UCA-14.0.0 collations
#
SET NAMES utf8mb4 COLLATE utf8mb4_bin;
CREATE TABLE allchars AS SELECT 1 AS code, ' ' AS str LIMIT 0;
SHOW CREATE TABLE allchars;
Table Create Table
allchars CREATE TABLE `allchars` (
`code` int(1) NOT NULL,
`str` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TABLE t1tmp (a INT NOT NULL);
FOR i IN 0..0xFFF
DO
INSERT INTO t1tmp VALUES (i);
END FOR;
$$
INSERT INTO allchars SELECT
t1.a*0x1000+t2.a,
CHAR(t1.a*0x1000+t2.a USING utf32)
FROM t1tmp t1, t1tmp t2
WHERE t1.a BETWEEN 0 AND 0x10F;
DROP TABLE t1tmp;
SELECT COUNT(*) FROM allchars;
COUNT(*)
1114112
#
# Load allkeys.txt from Unicode-14.0.0
#
CREATE TABLE allkeys_txt (a TEXT, b TEXT, c TEXT) ENGINE=MyISAM;
LOAD DATA INFILE '../../std_data/unicode/allkeys1400.txt'
INTO TABLE allkeys_txt FIELDS TERMINATED BY ';' (@a,@b,@qq)
SET a=TRIM(@a), b=TRIM(REGEXP_SUBSTR(@b,'^[^#]*')), c=TRIM(REGEXP_SUBSTR(@b, '#.*$'));
CREATE TABLE allkeys AS
SELECT
a,
CONVERT(CAST(UNHEX(regexp_replace(regexp_replace(regexp_replace(a,'(\\b[0-9A-Z]{4}\\b)','-0000\\1-'),'(\\b[0-9A-Z]{5}\\b)','-000\\1-'),'[ -]','')) AS CHAR CHARACTER SET utf32) USING utf8mb4) COLLATE utf8mb4_bin AS str,
HEX(WEIGHT_STRING(CONVERT(CAST(UNHEX(regexp_replace(regexp_replace(regexp_replace(a,'(\\b[0-9A-Z]{4}\\b)','-0000\\1-'),'(\\b[0-9A-Z]{5}\\b)','-000\\1-'),'[ -]','')) AS CHAR CHARACTER SET utf32) USING utf8mb4) COLLATE utf8mb4_uca1400_ai_ci)) as ws,
REPLACE(REPLACE(REGEXP_REPLACE(b,'[[][.*](....)[.]....[.]....]','-\\1-'),'-0000-',''),'-','') AS wd,
c
FROM allkeys_txt
WHERE a RLIKE '^[0-9A-Z]';
ALTER TABLE allkeys ADD KEY(str(3));
#
# Test explicit weights for individual characters
# U+FDFA is the only character that has a different weight than allkeys.txt
#
SELECT COUNT(*), SUM(ws<>wd) FROM allkeys WHERE a NOT LIKE '% %';
COUNT(*) SUM(ws<>wd)
32958 1
SELECT a, ws, wd FROM allkeys WHERE ws<>wd AND a NOT LIKE '% %';
a ws wd
FDFA 27C22802282D02092762280228022819 27C22802282D02092762280228022819020927CE2802282E28190209281F27B72802280A
#
# Test explicit weights for built-in contractions
#
SELECT COUNT(*), SUM(ws<>wd) FROM allkeys WHERE a LIKE '% %';
COUNT(*) SUM(ws<>wd)
939 0
SELECT a, ws, wd FROM allkeys WHERE ws<>wd AND a LIKE '% %';
a ws wd
#
# Test implicit weights.
#
SELECT
HEX(code),
HEX(WEIGHT_STRING(str COLLATE utf8mb4_uca1400_ai_ci)) AS ws,
CASE
/* Core Han Unified Ideograms */
WHEN (code >= 0x4E00 AND code <= 0x9FFF) OR
(code >= 0xFA0E AND code <= 0xFA0F) OR
(code = 0xFA11) OR
(code >= 0xFA13 AND code <= 0xFA14) OR
(code = 0xFA1F) OR
(code = 0xFA21) OR
(code >= 0xFA23 AND code <= 0xFA24) OR
(code >= 0xFA27 AND code <= 0xFA29) THEN
CONCAT(LPAD(HEX(0xFB40 + (code >> 15)),4,'0'),
LPAD(HEX(0x8000 | (code & 0x7FFF)),4,'0'))
/* All other Han Unified Ideographs */
WHEN (code >= 0x3400 AND code <= 0x4DBF) OR
(code >= 0x20000 AND code <= 0x2A6DF) OR
(code >= 0x2A700 AND code <= 0x2B738) OR
(code >= 0x2B740 AND code <= 0x2B81D) OR
(code >= 0x2B820 AND code <= 0x2CEA1) OR
(code >= 0x2CEB0 AND code <= 0x2EBE0) OR
(code >= 0x30000 AND code <= 0x3134A) THEN
CONCAT(LPAD(HEX(0xFB80 + (code >> 15)),4,'0'),
LPAD(HEX(0x8000 | (code & 0x7FFF)),4,'0'))
/* Siniform: Tangut */
WHEN (code >= 0x17000 AND code <= 0x187FF) OR
(code >= 0x18800 AND code <= 0x18AFF) OR
(code >= 0x18D00 AND code <= 0x18D7F) THEN
CONCAT('FB00', LPAD(HEX(0x8000 | (code - 0x17000)),4,'0'))
/* Siniform: Nushu */
WHEN (code >= 0x1B170 AND code <= 0x1B2FF) THEN
CONCAT('FB01', LPAD(HEX(0x8000 | (code - 0x1B170)),4,'0'))
/* Siniform: Khitan */
WHEN (code >= 0x18B00 AND code <= 0x18CFF) THEN
CONCAT('FB02', LPAD(HEX(0x8000 | (code - 0x18B00)),4,'0'))
/* Unassigned: Any other code point */
ELSE
CONCAT(LPAD(HEX(0xFBC0 + (code >> 15)),4,'0'),
LPAD(HEX(0x8000 | (code & 0x7FFF)),4,'0'))
END AS wd
FROM allchars
LEFT OUTER JOIN allkeys USING (str)
WHERE allkeys.str IS NULL
HAVING ws<>wd
ORDER BY HEX(str);
HEX(code) ws wd
DROP TABLE allkeys_txt;
DROP TABLE allkeys;
DROP TABLE allchars;
#
# End of 10.8 tests
#
--source include/have_utf32.inc
--source include/have_utf8mb4.inc
--echo #
--echo # Start of 10.8 tests
--echo #
--echo #
--echo # MDEV-27009 Add UCA-14.0.0 collations
--echo #
SET NAMES utf8mb4 COLLATE utf8mb4_bin;
--source include/ctype_unicode_allchars.inc
--echo #
--echo # Load allkeys.txt from Unicode-14.0.0
--echo #
# The 14.0.0 file has three weight levels.
# Unlike 5.2.0, there are no optional extra fields after the character
# name like "; QQK". But lets still use the "@qq" variable for symmetry.
#00A0 ; [*0209.0020.001B] # NO-BREAK SPACE
#
CREATE TABLE allkeys_txt (a TEXT, b TEXT, c TEXT) ENGINE=MyISAM;
LOAD DATA INFILE '../../std_data/unicode/allkeys1400.txt'
INTO TABLE allkeys_txt FIELDS TERMINATED BY ';' (@a,@b,@qq)
SET a=TRIM(@a), b=TRIM(REGEXP_SUBSTR(@b,'^[^#]*')), c=TRIM(REGEXP_SUBSTR(@b, '#.*$'));
CREATE TABLE allkeys AS
SELECT
a,
CONVERT(CAST(UNHEX(regexp_replace(regexp_replace(regexp_replace(a,'(\\b[0-9A-Z]{4}\\b)','-0000\\1-'),'(\\b[0-9A-Z]{5}\\b)','-000\\1-'),'[ -]','')) AS CHAR CHARACTER SET utf32) USING utf8mb4) COLLATE utf8mb4_bin AS str,
HEX(WEIGHT_STRING(CONVERT(CAST(UNHEX(regexp_replace(regexp_replace(regexp_replace(a,'(\\b[0-9A-Z]{4}\\b)','-0000\\1-'),'(\\b[0-9A-Z]{5}\\b)','-000\\1-'),'[ -]','')) AS CHAR CHARACTER SET utf32) USING utf8mb4) COLLATE utf8mb4_uca1400_ai_ci)) as ws,
REPLACE(REPLACE(REGEXP_REPLACE(b,'[[][.*](....)[.]....[.]....]','-\\1-'),'-0000-',''),'-','') AS wd,
c
FROM allkeys_txt
WHERE a RLIKE '^[0-9A-Z]';
ALTER TABLE allkeys ADD KEY(str(3));
--echo #
--echo # Test explicit weights for individual characters
--echo # U+FDFA is the only character that has a different weight than allkeys.txt
--echo #
# The (NOT LIKE '% %') part of the condition filters out contractions.
SELECT COUNT(*), SUM(ws<>wd) FROM allkeys WHERE a NOT LIKE '% %';
SELECT a, ws, wd FROM allkeys WHERE ws<>wd AND a NOT LIKE '% %';
--echo #
--echo # Test explicit weights for built-in contractions
--echo #
SELECT COUNT(*), SUM(ws<>wd) FROM allkeys WHERE a LIKE '% %';
SELECT a, ws, wd FROM allkeys WHERE ws<>wd AND a LIKE '% %';
--echo #
--echo # Test implicit weights.
--echo #
# The below CASE resembles the implicit weight formula according to
# https://unicode.org/reports/tr10/#Implicit_Weights
# as of Unicode-14.0.0
SELECT
HEX(code),
HEX(WEIGHT_STRING(str COLLATE utf8mb4_uca1400_ai_ci)) AS ws,
CASE
/* Core Han Unified Ideograms */
WHEN (code >= 0x4E00 AND code <= 0x9FFF) OR
(code >= 0xFA0E AND code <= 0xFA0F) OR
(code = 0xFA11) OR
(code >= 0xFA13 AND code <= 0xFA14) OR
(code = 0xFA1F) OR
(code = 0xFA21) OR
(code >= 0xFA23 AND code <= 0xFA24) OR
(code >= 0xFA27 AND code <= 0xFA29) THEN
CONCAT(LPAD(HEX(0xFB40 + (code >> 15)),4,'0'),
LPAD(HEX(0x8000 | (code & 0x7FFF)),4,'0'))
/* All other Han Unified Ideographs */
WHEN (code >= 0x3400 AND code <= 0x4DBF) OR
(code >= 0x20000 AND code <= 0x2A6DF) OR
(code >= 0x2A700 AND code <= 0x2B738) OR
(code >= 0x2B740 AND code <= 0x2B81D) OR
(code >= 0x2B820 AND code <= 0x2CEA1) OR
(code >= 0x2CEB0 AND code <= 0x2EBE0) OR
(code >= 0x30000 AND code <= 0x3134A) THEN
CONCAT(LPAD(HEX(0xFB80 + (code >> 15)),4,'0'),
LPAD(HEX(0x8000 | (code & 0x7FFF)),4,'0'))
/* Siniform: Tangut */
WHEN (code >= 0x17000 AND code <= 0x187FF) OR
(code >= 0x18800 AND code <= 0x18AFF) OR
(code >= 0x18D00 AND code <= 0x18D7F) THEN
CONCAT('FB00', LPAD(HEX(0x8000 | (code - 0x17000)),4,'0'))
/* Siniform: Nushu */
WHEN (code >= 0x1B170 AND code <= 0x1B2FF) THEN
CONCAT('FB01', LPAD(HEX(0x8000 | (code - 0x1B170)),4,'0'))
/* Siniform: Khitan */
WHEN (code >= 0x18B00 AND code <= 0x18CFF) THEN
CONCAT('FB02', LPAD(HEX(0x8000 | (code - 0x18B00)),4,'0'))
/* Unassigned: Any other code point */
ELSE
CONCAT(LPAD(HEX(0xFBC0 + (code >> 15)),4,'0'),
LPAD(HEX(0x8000 | (code & 0x7FFF)),4,'0'))
END AS wd
FROM allchars
LEFT OUTER JOIN allkeys USING (str)
WHERE allkeys.str IS NULL
HAVING ws<>wd
ORDER BY HEX(str);
DROP TABLE allkeys_txt;
DROP TABLE allkeys;
DROP TABLE allchars;
--echo #
--echo # End of 10.8 tests
--echo #
......@@ -312,17 +312,17 @@ latin1_swedish_nopad_ci latin1 1032 # 1
latin1_nopad_bin latin1 1071 # 1
select * from information_schema.COLLATION_CHARACTER_SET_APPLICABILITY
where COLLATION_NAME like 'latin1%';
COLLATION_NAME CHARACTER_SET_NAME
latin1_german1_ci latin1
latin1_swedish_ci latin1
latin1_danish_ci latin1
latin1_german2_ci latin1
latin1_bin latin1
latin1_general_ci latin1
latin1_general_cs latin1
latin1_spanish_ci latin1
latin1_swedish_nopad_ci latin1
latin1_nopad_bin latin1
COLLATION_NAME CHARACTER_SET_NAME FULL_COLLATION_NAME ID IS_DEFAULT
latin1_german1_ci latin1 latin1_german1_ci 5
latin1_swedish_ci latin1 latin1_swedish_ci 8 Yes
latin1_danish_ci latin1 latin1_danish_ci 15
latin1_german2_ci latin1 latin1_german2_ci 31
latin1_bin latin1 latin1_bin 47
latin1_general_ci latin1 latin1_general_ci 48
latin1_general_cs latin1 latin1_general_cs 49
latin1_spanish_ci latin1 latin1_spanish_ci 94
latin1_swedish_nopad_ci latin1 latin1_swedish_nopad_ci 1032
latin1_nopad_bin latin1 latin1_nopad_bin 1071
drop procedure if exists sel2;
drop function if exists sub1;
drop function if exists sub2;
......@@ -610,7 +610,7 @@ SHOW CREATE TABLE INFORMATION_SCHEMA.character_sets;
Table Create Table
CHARACTER_SETS CREATE TEMPORARY TABLE `CHARACTER_SETS` (
`CHARACTER_SET_NAME` varchar(32) NOT NULL,
`DEFAULT_COLLATE_NAME` varchar(32) NOT NULL,
`DEFAULT_COLLATE_NAME` varchar(64) NOT NULL,
`DESCRIPTION` varchar(60) NOT NULL,
`MAXLEN` bigint(3) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3
......@@ -619,7 +619,7 @@ SHOW CREATE TABLE INFORMATION_SCHEMA.character_sets;
Table Create Table
CHARACTER_SETS CREATE TEMPORARY TABLE `CHARACTER_SETS` (
`CHARACTER_SET_NAME` varchar(32) NOT NULL,
`DEFAULT_COLLATE_NAME` varchar(32) NOT NULL,
`DEFAULT_COLLATE_NAME` varchar(64) NOT NULL,
`DESCRIPTION` varchar(60) NOT NULL,
`MAXLEN` bigint(3) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3
......@@ -634,7 +634,7 @@ show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`CHARACTER_SET_NAME` varchar(32) NOT NULL,
`DEFAULT_COLLATE_NAME` varchar(32) NOT NULL,
`DEFAULT_COLLATE_NAME` varchar(64) NOT NULL,
`DESCRIPTION` varchar(60) NOT NULL,
`MAXLEN` bigint(3) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3
......@@ -828,7 +828,7 @@ where table_schema="information_schema" and table_name="COLUMNS" and
(column_name="character_set_name" or column_name="collation_name");
column_type
varchar(32)
varchar(32)
varchar(64)
select TABLE_ROWS from information_schema.tables where
table_schema="information_schema" and table_name="COLUMNS";
TABLE_ROWS
......
......@@ -34,8 +34,8 @@ ROUTINES CREATE TEMPORARY TABLE `ROUTINES` (
`ROUTINE_COMMENT` longtext NOT NULL,
`DEFINER` varchar(384) NOT NULL,
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL,
`COLLATION_CONNECTION` varchar(32) NOT NULL,
`DATABASE_COLLATION` varchar(32) NOT NULL
`COLLATION_CONNECTION` varchar(64) NOT NULL,
`DATABASE_COLLATION` varchar(64) NOT NULL
) DEFAULT CHARSET=utf8mb3
SELECT * FROM information_schema.columns
WHERE table_schema = 'information_schema'
......@@ -687,14 +687,14 @@ ORDINAL_POSITION 30
COLUMN_DEFAULT NULL
IS_NULLABLE NO
DATA_TYPE varchar
CHARACTER_MAXIMUM_LENGTH 32
CHARACTER_OCTET_LENGTH 96
CHARACTER_MAXIMUM_LENGTH 64
CHARACTER_OCTET_LENGTH 192
NUMERIC_PRECISION NULL
NUMERIC_SCALE NULL
DATETIME_PRECISION NULL
CHARACTER_SET_NAME utf8mb3
COLLATION_NAME utf8mb3_general_ci
COLUMN_TYPE varchar(32)
COLUMN_TYPE varchar(64)
COLUMN_KEY
EXTRA
PRIVILEGES #
......@@ -709,14 +709,14 @@ ORDINAL_POSITION 31
COLUMN_DEFAULT NULL
IS_NULLABLE NO
DATA_TYPE varchar
CHARACTER_MAXIMUM_LENGTH 32
CHARACTER_OCTET_LENGTH 96
CHARACTER_MAXIMUM_LENGTH 64
CHARACTER_OCTET_LENGTH 192
NUMERIC_PRECISION NULL
NUMERIC_SCALE NULL
DATETIME_PRECISION NULL
CHARACTER_SET_NAME utf8mb3
COLLATION_NAME utf8mb3_general_ci
COLUMN_TYPE varchar(32)
COLUMN_TYPE varchar(64)
COLUMN_KEY
EXTRA
PRIVILEGES #
......@@ -754,8 +754,8 @@ SQL_MODE varchar(8192) NO NULL
ROUTINE_COMMENT longtext NO NULL
DEFINER varchar(384) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
COLLATION_CONNECTION varchar(32) NO NULL
DATABASE_COLLATION varchar(32) NO NULL
COLLATION_CONNECTION varchar(64) NO NULL
DATABASE_COLLATION varchar(64) NO NULL
# ========== routines.2 ==========
DROP DATABASE IF EXISTS i_s_routines_test;
CREATE DATABASE i_s_routines_test;
......
......@@ -3810,7 +3810,7 @@ CREATE TEMPORARY TABLE `TABLES` (
`CREATE_TIME` datetime,
`UPDATE_TIME` datetime,
`CHECK_TIME` datetime,
`TABLE_COLLATION` varchar(32),
`TABLE_COLLATION` varchar(64),
`CHECKSUM` bigint(21) unsigned,
`CREATE_OPTIONS` varchar(2048),
`TABLE_COMMENT` varchar(2048) NOT NULL,
......
......@@ -134,7 +134,7 @@ def information_schema TABLES TABLES AUTO_INCREMENT Auto_increment 8 21 0 Y 3689
def information_schema TABLES TABLES CREATE_TIME Create_time 12 19 0 Y 4224 0 63
def information_schema TABLES TABLES UPDATE_TIME Update_time 12 19 0 Y 4224 0 63
def information_schema TABLES TABLES CHECK_TIME Check_time 12 19 0 Y 4224 0 63
def information_schema TABLES TABLES TABLE_COLLATION Collation 253 32 0 Y 4096 0 8
def information_schema TABLES TABLES TABLE_COLLATION Collation 253 64 0 Y 4096 0 8
def information_schema TABLES TABLES CHECKSUM Checksum 8 21 0 Y 36896 0 63
def information_schema TABLES TABLES CREATE_OPTIONS Create_options 253 2048 0 Y 4096 0 8
def information_schema TABLES TABLES TABLE_COMMENT Comment 253 2048 0 N 4097 0 8
......@@ -879,17 +879,17 @@ SHOW CHARACTER SET LIKE 'utf8mb3';
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def information_schema CHARACTER_SETS CHARACTER_SETS CHARACTER_SET_NAME Charset 253 96 7 N 4097 0 33
def information_schema CHARACTER_SETS CHARACTER_SETS DESCRIPTION Description 253 180 13 N 4097 0 33
def information_schema CHARACTER_SETS CHARACTER_SETS DEFAULT_COLLATE_NAME Default collation 253 96 18 N 4097 0 33
def information_schema CHARACTER_SETS CHARACTER_SETS DEFAULT_COLLATE_NAME Default collation 253 192 18 N 4097 0 33
def information_schema CHARACTER_SETS CHARACTER_SETS MAXLEN Maxlen 8 3 1 N 36865 0 63
Charset Description Default collation Maxlen
utf8mb3 UTF-8 Unicode utf8mb3_general_ci 3
----------------------------------------------------------------
SHOW COLLATION LIKE 'latin1_bin';
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def information_schema COLLATIONS COLLATIONS COLLATION_NAME Collation 253 96 10 N 4097 0 33
def information_schema COLLATIONS COLLATIONS CHARACTER_SET_NAME Charset 253 96 6 N 4097 0 33
def information_schema COLLATIONS COLLATIONS ID Id 8 11 2 N 36865 0 63
def information_schema COLLATIONS COLLATIONS IS_DEFAULT Default 253 9 0 N 4097 0 33
def information_schema COLLATIONS COLLATIONS COLLATION_NAME Collation 253 192 10 N 4097 0 33
def information_schema COLLATIONS COLLATIONS CHARACTER_SET_NAME Charset 253 96 6 Y 4096 0 33
def information_schema COLLATIONS COLLATIONS ID Id 8 11 2 Y 36864 0 63
def information_schema COLLATIONS COLLATIONS IS_DEFAULT Default 253 9 0 Y 4096 0 33
def information_schema COLLATIONS COLLATIONS IS_COMPILED Compiled 253 9 3 N 4097 0 33
def information_schema COLLATIONS COLLATIONS SORTLEN Sortlen 8 3 1 N 36865 0 63
Collation Charset Id Default Compiled Sortlen
......@@ -956,7 +956,7 @@ def information_schema TABLES TABLES TABLE_NAME TABLE_NAME 253 192 2 N 4097 0 33
def information_schema TABLES TABLES TABLE_TYPE TABLE_TYPE 253 192 10 N 4097 0 33
def information_schema TABLES TABLES ENGINE ENGINE 253 192 6 Y 4096 0 33
def information_schema TABLES TABLES ROW_FORMAT ROW_FORMAT 253 30 5 Y 4096 0 33
def information_schema TABLES TABLES TABLE_COLLATION TABLE_COLLATION 253 96 17 Y 4096 0 33
def information_schema TABLES TABLES TABLE_COLLATION TABLE_COLLATION 253 192 17 Y 4096 0 33
def information_schema TABLES TABLES CREATE_OPTIONS CREATE_OPTIONS 253 6144 0 Y 4096 0 33
def information_schema TABLES TABLES TABLE_COMMENT TABLE_COMMENT 253 6144 0 N 4097 0 33
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE ROW_FORMAT TABLE_COLLATION CREATE_OPTIONS TABLE_COMMENT
......@@ -988,7 +988,7 @@ def information_schema COLUMNS COLUMNS COLUMN_DEFAULT COLUMN_DEFAULT 252 589788
def information_schema COLUMNS COLUMNS IS_NULLABLE IS_NULLABLE 253 9 2 N 4097 0 33
def information_schema COLUMNS COLUMNS DATA_TYPE DATA_TYPE 253 192 3 N 4097 0 33
def information_schema COLUMNS COLUMNS CHARACTER_SET_NAME CHARACTER_SET_NAME 253 96 0 Y 4096 0 33
def information_schema COLUMNS COLUMNS COLLATION_NAME COLLATION_NAME 253 96 0 Y 4096 0 33
def information_schema COLUMNS COLUMNS COLLATION_NAME COLLATION_NAME 253 192 0 Y 4096 0 33
def information_schema COLUMNS COLUMNS COLUMN_TYPE COLUMN_TYPE 252 589815 7 N 4113 0 33
def information_schema COLUMNS COLUMNS COLUMN_KEY COLUMN_KEY 253 9 3 N 4097 0 33
def information_schema COLUMNS COLUMNS EXTRA EXTRA 253 240 0 N 4097 0 33
......@@ -1025,8 +1025,8 @@ def information_schema TRIGGERS TRIGGERS CREATED Created 12 22 22 Y 4224 2 63
def information_schema TRIGGERS TRIGGERS SQL_MODE sql_mode 253 24576 89 N 4097 0 33
def information_schema TRIGGERS TRIGGERS DEFINER Definer 253 1152 14 N 4097 0 33
def information_schema TRIGGERS TRIGGERS CHARACTER_SET_CLIENT character_set_client 253 96 6 N 4097 0 33
def information_schema TRIGGERS TRIGGERS COLLATION_CONNECTION collation_connection 253 96 6 N 4097 0 33
def information_schema TRIGGERS TRIGGERS DATABASE_COLLATION Database Collation 253 96 17 N 4097 0 33
def information_schema TRIGGERS TRIGGERS COLLATION_CONNECTION collation_connection 253 192 6 N 4097 0 33
def information_schema TRIGGERS TRIGGERS DATABASE_COLLATION Database Collation 253 192 17 N 4097 0 33
Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
t1_bi INSERT t1 SET @a = 1 BEFORE # STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost binary binary latin1_swedish_ci
----------------------------------------------------------------
......@@ -1081,7 +1081,7 @@ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is
def View 253 192 2 N 1 39 33
def Create View 253 3072 103 N 1 39 33
def character_set_client 253 96 6 N 1 39 33
def collation_connection 253 96 6 N 1 39 33
def collation_connection 253 192 6 N 1 39 33
View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1` binary binary
----------------------------------------------------------------
......@@ -1098,7 +1098,7 @@ def information_schema VIEWS VIEWS IS_UPDATABLE IS_UPDATABLE 253 9 2 N 4097 0 33
def information_schema VIEWS VIEWS DEFINER DEFINER 253 1152 14 N 4097 0 33
def information_schema VIEWS VIEWS SECURITY_TYPE SECURITY_TYPE 253 21 7 N 4097 0 33
def information_schema VIEWS VIEWS CHARACTER_SET_CLIENT CHARACTER_SET_CLIENT 253 96 6 N 4097 0 33
def information_schema VIEWS VIEWS COLLATION_CONNECTION COLLATION_CONNECTION 253 96 6 N 4097 0 33
def information_schema VIEWS VIEWS COLLATION_CONNECTION COLLATION_CONNECTION 253 192 6 N 4097 0 33
def information_schema VIEWS VIEWS ALGORITHM ALGORITHM 253 30 9 N 4097 0 33
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION ALGORITHM
def test v1 select 1 AS `1` NONE NO root@localhost DEFINER binary binary UNDEFINED
......@@ -1109,7 +1109,7 @@ def Procedure 253 192 2 N 1 39 33
def sql_mode 253 267 89 N 1 39 33
def Create Procedure 253 3072 59 Y 0 39 33
def character_set_client 253 96 6 N 1 39 33
def collation_connection 253 96 6 N 1 39 33
def collation_connection 253 192 6 N 1 39 33
def Database Collation 253 96 17 N 1 39 33
Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
p1 STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
......@@ -1164,7 +1164,7 @@ def Function 253 192 2 N 1 39 33
def sql_mode 253 267 89 N 1 39 33
def Create Function 253 3072 74 Y 0 39 33
def character_set_client 253 96 6 N 1 39 33
def collation_connection 253 96 6 N 1 39 33
def collation_connection 253 192 6 N 1 39 33
def Database Collation 253 96 17 N 1 39 33
Function sql_mode Create Function character_set_client collation_connection Database Collation
f1 STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
......
......@@ -1744,24 +1744,24 @@ drop function t1_max;
#
# Bug #59884: setting charset to 2048 crashes
#
set session character_set_results = 2048;
ERROR 42000: Unknown character set: '2048'
set session character_set_client=2048;
ERROR 42000: Unknown character set: '2048'
set session character_set_connection=2048;
ERROR 42000: Unknown character set: '2048'
set session character_set_server=2048;
ERROR 42000: Unknown character set: '2048'
set session collation_server=2048;
ERROR HY000: Unknown collation: '2048'
set session character_set_filesystem=2048;
ERROR 42000: Unknown character set: '2048'
set session character_set_database=2048;
ERROR 42000: Unknown character set: '2048'
set session collation_connection=2048;
ERROR HY000: Unknown collation: '2048'
set session collation_database=2048;
ERROR HY000: Unknown collation: '2048'
set session character_set_results = 4096;
ERROR 42000: Unknown character set: '4096'
set session character_set_client=4096;
ERROR 42000: Unknown character set: '4096'
set session character_set_connection=4096;
ERROR 42000: Unknown character set: '4096'
set session character_set_server=4096;
ERROR 42000: Unknown character set: '4096'
set session collation_server=4096;
ERROR HY000: Unknown collation: '4096'
set session character_set_filesystem=4096;
ERROR 42000: Unknown character set: '4096'
set session character_set_database=4096;
ERROR 42000: Unknown character set: '4096'
set session collation_connection=4096;
ERROR HY000: Unknown collation: '4096'
set session collation_database=4096;
ERROR HY000: Unknown collation: '4096'
set session rand_seed1=DEFAULT;
ERROR 42000: Variable 'rand_seed1' doesn't have a default value
set autocommit = value(v);
......
......@@ -1484,23 +1484,23 @@ drop function t1_max;
--echo #
--error ER_UNKNOWN_CHARACTER_SET
set session character_set_results = 2048;
set session character_set_results = 4096;
--error ER_UNKNOWN_CHARACTER_SET
set session character_set_client=2048;
set session character_set_client=4096;
--error ER_UNKNOWN_CHARACTER_SET
set session character_set_connection=2048;
set session character_set_connection=4096;
--error ER_UNKNOWN_CHARACTER_SET
set session character_set_server=2048;
set session character_set_server=4096;
--error ER_UNKNOWN_COLLATION
set session collation_server=2048;
set session collation_server=4096;
--error ER_UNKNOWN_CHARACTER_SET
set session character_set_filesystem=2048;
set session character_set_filesystem=4096;
--error ER_UNKNOWN_CHARACTER_SET
set session character_set_database=2048;
set session character_set_database=4096;
--error ER_UNKNOWN_COLLATION
set session collation_connection=2048;
set session collation_connection=4096;
--error ER_UNKNOWN_COLLATION
set session collation_database=2048;
set session collation_database=4096;
#
# Bug #16044655 CRASH: SETTING DEFAULT VALUE FOR SOME VARIABLES
......
......@@ -175,6 +175,9 @@
</collation>
<collation name="utf8mb4_test_520_nopad_ci" id="329" version="5.2.0" flag="nopad">
</collation>
<collation name="utf8mb4_uca1400_test01_as_ci" id="330" version="14.0.0">
<settings strength="2"/>
</collation>
</charset>
<charset name="utf16">
......
This diff is collapsed.
......@@ -224,6 +224,190 @@ utf8mb4_general_nopad_ci utf8mb4 1069 # #
utf8mb4_nopad_bin utf8mb4 1070 # #
utf8mb4_unicode_nopad_ci utf8mb4 1248 # #
utf8mb4_unicode_520_nopad_ci utf8mb4 1270 # #
uca1400_ai_ci NULL NULL NULL # #
uca1400_ai_cs NULL NULL NULL # #
uca1400_as_ci NULL NULL NULL # #
uca1400_as_cs NULL NULL NULL # #
uca1400_nopad_ai_ci NULL NULL NULL # #
uca1400_nopad_ai_cs NULL NULL NULL # #
uca1400_nopad_as_ci NULL NULL NULL # #
uca1400_nopad_as_cs NULL NULL NULL # #
uca1400_icelandic_ai_ci NULL NULL NULL # #
uca1400_icelandic_ai_cs NULL NULL NULL # #
uca1400_icelandic_as_ci NULL NULL NULL # #
uca1400_icelandic_as_cs NULL NULL NULL # #
uca1400_icelandic_nopad_ai_ci NULL NULL NULL # #
uca1400_icelandic_nopad_ai_cs NULL NULL NULL # #
uca1400_icelandic_nopad_as_ci NULL NULL NULL # #
uca1400_icelandic_nopad_as_cs NULL NULL NULL # #
uca1400_latvian_ai_ci NULL NULL NULL # #
uca1400_latvian_ai_cs NULL NULL NULL # #
uca1400_latvian_as_ci NULL NULL NULL # #
uca1400_latvian_as_cs NULL NULL NULL # #
uca1400_latvian_nopad_ai_ci NULL NULL NULL # #
uca1400_latvian_nopad_ai_cs NULL NULL NULL # #
uca1400_latvian_nopad_as_ci NULL NULL NULL # #
uca1400_latvian_nopad_as_cs NULL NULL NULL # #
uca1400_romanian_ai_ci NULL NULL NULL # #
uca1400_romanian_ai_cs NULL NULL NULL # #
uca1400_romanian_as_ci NULL NULL NULL # #
uca1400_romanian_as_cs NULL NULL NULL # #
uca1400_romanian_nopad_ai_ci NULL NULL NULL # #
uca1400_romanian_nopad_ai_cs NULL NULL NULL # #
uca1400_romanian_nopad_as_ci NULL NULL NULL # #
uca1400_romanian_nopad_as_cs NULL NULL NULL # #
uca1400_slovenian_ai_ci NULL NULL NULL # #
uca1400_slovenian_ai_cs NULL NULL NULL # #
uca1400_slovenian_as_ci NULL NULL NULL # #
uca1400_slovenian_as_cs NULL NULL NULL # #
uca1400_slovenian_nopad_ai_ci NULL NULL NULL # #
uca1400_slovenian_nopad_ai_cs NULL NULL NULL # #
uca1400_slovenian_nopad_as_ci NULL NULL NULL # #
uca1400_slovenian_nopad_as_cs NULL NULL NULL # #
uca1400_polish_ai_ci NULL NULL NULL # #
uca1400_polish_ai_cs NULL NULL NULL # #
uca1400_polish_as_ci NULL NULL NULL # #
uca1400_polish_as_cs NULL NULL NULL # #
uca1400_polish_nopad_ai_ci NULL NULL NULL # #
uca1400_polish_nopad_ai_cs NULL NULL NULL # #
uca1400_polish_nopad_as_ci NULL NULL NULL # #
uca1400_polish_nopad_as_cs NULL NULL NULL # #
uca1400_estonian_ai_ci NULL NULL NULL # #
uca1400_estonian_ai_cs NULL NULL NULL # #
uca1400_estonian_as_ci NULL NULL NULL # #
uca1400_estonian_as_cs NULL NULL NULL # #
uca1400_estonian_nopad_ai_ci NULL NULL NULL # #
uca1400_estonian_nopad_ai_cs NULL NULL NULL # #
uca1400_estonian_nopad_as_ci NULL NULL NULL # #
uca1400_estonian_nopad_as_cs NULL NULL NULL # #
uca1400_spanish_ai_ci NULL NULL NULL # #
uca1400_spanish_ai_cs NULL NULL NULL # #
uca1400_spanish_as_ci NULL NULL NULL # #
uca1400_spanish_as_cs NULL NULL NULL # #
uca1400_spanish_nopad_ai_ci NULL NULL NULL # #
uca1400_spanish_nopad_ai_cs NULL NULL NULL # #
uca1400_spanish_nopad_as_ci NULL NULL NULL # #
uca1400_spanish_nopad_as_cs NULL NULL NULL # #
uca1400_swedish_ai_ci NULL NULL NULL # #
uca1400_swedish_ai_cs NULL NULL NULL # #
uca1400_swedish_as_ci NULL NULL NULL # #
uca1400_swedish_as_cs NULL NULL NULL # #
uca1400_swedish_nopad_ai_ci NULL NULL NULL # #
uca1400_swedish_nopad_ai_cs NULL NULL NULL # #
uca1400_swedish_nopad_as_ci NULL NULL NULL # #
uca1400_swedish_nopad_as_cs NULL NULL NULL # #
uca1400_turkish_ai_ci NULL NULL NULL # #
uca1400_turkish_ai_cs NULL NULL NULL # #
uca1400_turkish_as_ci NULL NULL NULL # #
uca1400_turkish_as_cs NULL NULL NULL # #
uca1400_turkish_nopad_ai_ci NULL NULL NULL # #
uca1400_turkish_nopad_ai_cs NULL NULL NULL # #
uca1400_turkish_nopad_as_ci NULL NULL NULL # #
uca1400_turkish_nopad_as_cs NULL NULL NULL # #
uca1400_czech_ai_ci NULL NULL NULL # #
uca1400_czech_ai_cs NULL NULL NULL # #
uca1400_czech_as_ci NULL NULL NULL # #
uca1400_czech_as_cs NULL NULL NULL # #
uca1400_czech_nopad_ai_ci NULL NULL NULL # #
uca1400_czech_nopad_ai_cs NULL NULL NULL # #
uca1400_czech_nopad_as_ci NULL NULL NULL # #
uca1400_czech_nopad_as_cs NULL NULL NULL # #
uca1400_danish_ai_ci NULL NULL NULL # #
uca1400_danish_ai_cs NULL NULL NULL # #
uca1400_danish_as_ci NULL NULL NULL # #
uca1400_danish_as_cs NULL NULL NULL # #
uca1400_danish_nopad_ai_ci NULL NULL NULL # #
uca1400_danish_nopad_ai_cs NULL NULL NULL # #
uca1400_danish_nopad_as_ci NULL NULL NULL # #
uca1400_danish_nopad_as_cs NULL NULL NULL # #
uca1400_lithuanian_ai_ci NULL NULL NULL # #
uca1400_lithuanian_ai_cs NULL NULL NULL # #
uca1400_lithuanian_as_ci NULL NULL NULL # #
uca1400_lithuanian_as_cs NULL NULL NULL # #
uca1400_lithuanian_nopad_ai_ci NULL NULL NULL # #
uca1400_lithuanian_nopad_ai_cs NULL NULL NULL # #
uca1400_lithuanian_nopad_as_ci NULL NULL NULL # #
uca1400_lithuanian_nopad_as_cs NULL NULL NULL # #
uca1400_slovak_ai_ci NULL NULL NULL # #
uca1400_slovak_ai_cs NULL NULL NULL # #
uca1400_slovak_as_ci NULL NULL NULL # #
uca1400_slovak_as_cs NULL NULL NULL # #
uca1400_slovak_nopad_ai_ci NULL NULL NULL # #
uca1400_slovak_nopad_ai_cs NULL NULL NULL # #
uca1400_slovak_nopad_as_ci NULL NULL NULL # #
uca1400_slovak_nopad_as_cs NULL NULL NULL # #
uca1400_spanish2_ai_ci NULL NULL NULL # #
uca1400_spanish2_ai_cs NULL NULL NULL # #
uca1400_spanish2_as_ci NULL NULL NULL # #
uca1400_spanish2_as_cs NULL NULL NULL # #
uca1400_spanish2_nopad_ai_ci NULL NULL NULL # #
uca1400_spanish2_nopad_ai_cs NULL NULL NULL # #
uca1400_spanish2_nopad_as_ci NULL NULL NULL # #
uca1400_spanish2_nopad_as_cs NULL NULL NULL # #
uca1400_roman_ai_ci NULL NULL NULL # #
uca1400_roman_ai_cs NULL NULL NULL # #
uca1400_roman_as_ci NULL NULL NULL # #
uca1400_roman_as_cs NULL NULL NULL # #
uca1400_roman_nopad_ai_ci NULL NULL NULL # #
uca1400_roman_nopad_ai_cs NULL NULL NULL # #
uca1400_roman_nopad_as_ci NULL NULL NULL # #
uca1400_roman_nopad_as_cs NULL NULL NULL # #
uca1400_persian_ai_ci NULL NULL NULL # #
uca1400_persian_ai_cs NULL NULL NULL # #
uca1400_persian_as_ci NULL NULL NULL # #
uca1400_persian_as_cs NULL NULL NULL # #
uca1400_persian_nopad_ai_ci NULL NULL NULL # #
uca1400_persian_nopad_ai_cs NULL NULL NULL # #
uca1400_persian_nopad_as_ci NULL NULL NULL # #
uca1400_persian_nopad_as_cs NULL NULL NULL # #
uca1400_esperanto_ai_ci NULL NULL NULL # #
uca1400_esperanto_ai_cs NULL NULL NULL # #
uca1400_esperanto_as_ci NULL NULL NULL # #
uca1400_esperanto_as_cs NULL NULL NULL # #
uca1400_esperanto_nopad_ai_ci NULL NULL NULL # #
uca1400_esperanto_nopad_ai_cs NULL NULL NULL # #
uca1400_esperanto_nopad_as_ci NULL NULL NULL # #
uca1400_esperanto_nopad_as_cs NULL NULL NULL # #
uca1400_hungarian_ai_ci NULL NULL NULL # #
uca1400_hungarian_ai_cs NULL NULL NULL # #
uca1400_hungarian_as_ci NULL NULL NULL # #
uca1400_hungarian_as_cs NULL NULL NULL # #
uca1400_hungarian_nopad_ai_ci NULL NULL NULL # #
uca1400_hungarian_nopad_ai_cs NULL NULL NULL # #
uca1400_hungarian_nopad_as_ci NULL NULL NULL # #
uca1400_hungarian_nopad_as_cs NULL NULL NULL # #
uca1400_sinhala_ai_ci NULL NULL NULL # #
uca1400_sinhala_ai_cs NULL NULL NULL # #
uca1400_sinhala_as_ci NULL NULL NULL # #
uca1400_sinhala_as_cs NULL NULL NULL # #
uca1400_sinhala_nopad_ai_ci NULL NULL NULL # #
uca1400_sinhala_nopad_ai_cs NULL NULL NULL # #
uca1400_sinhala_nopad_as_ci NULL NULL NULL # #
uca1400_sinhala_nopad_as_cs NULL NULL NULL # #
uca1400_german2_ai_ci NULL NULL NULL # #
uca1400_german2_ai_cs NULL NULL NULL # #
uca1400_german2_as_ci NULL NULL NULL # #
uca1400_german2_as_cs NULL NULL NULL # #
uca1400_german2_nopad_ai_ci NULL NULL NULL # #
uca1400_german2_nopad_ai_cs NULL NULL NULL # #
uca1400_german2_nopad_as_ci NULL NULL NULL # #
uca1400_german2_nopad_as_cs NULL NULL NULL # #
uca1400_vietnamese_ai_ci NULL NULL NULL # #
uca1400_vietnamese_ai_cs NULL NULL NULL # #
uca1400_vietnamese_as_ci NULL NULL NULL # #
uca1400_vietnamese_as_cs NULL NULL NULL # #
uca1400_vietnamese_nopad_ai_ci NULL NULL NULL # #
uca1400_vietnamese_nopad_ai_cs NULL NULL NULL # #
uca1400_vietnamese_nopad_as_ci NULL NULL NULL # #
uca1400_vietnamese_nopad_as_cs NULL NULL NULL # #
uca1400_croatian_ai_ci NULL NULL NULL # #
uca1400_croatian_ai_cs NULL NULL NULL # #
uca1400_croatian_as_ci NULL NULL NULL # #
uca1400_croatian_as_cs NULL NULL NULL # #
uca1400_croatian_nopad_ai_ci NULL NULL NULL # #
uca1400_croatian_nopad_ai_cs NULL NULL NULL # #
uca1400_croatian_nopad_as_ci NULL NULL NULL # #
uca1400_croatian_nopad_as_cs NULL NULL NULL # #
cp1251_bulgarian_ci cp1251 14 # #
cp1251_ukrainian_ci cp1251 23 # #
cp1251_bin cp1251 50 # #
......
......@@ -224,6 +224,190 @@ utf8mb4_general_nopad_ci utf8mb4 1069 # #
utf8mb4_nopad_bin utf8mb4 1070 # #
utf8mb4_unicode_nopad_ci utf8mb4 1248 # #
utf8mb4_unicode_520_nopad_ci utf8mb4 1270 # #
uca1400_ai_ci NULL NULL NULL # #
uca1400_ai_cs NULL NULL NULL # #
uca1400_as_ci NULL NULL NULL # #
uca1400_as_cs NULL NULL NULL # #
uca1400_nopad_ai_ci NULL NULL NULL # #
uca1400_nopad_ai_cs NULL NULL NULL # #
uca1400_nopad_as_ci NULL NULL NULL # #
uca1400_nopad_as_cs NULL NULL NULL # #
uca1400_icelandic_ai_ci NULL NULL NULL # #
uca1400_icelandic_ai_cs NULL NULL NULL # #
uca1400_icelandic_as_ci NULL NULL NULL # #
uca1400_icelandic_as_cs NULL NULL NULL # #
uca1400_icelandic_nopad_ai_ci NULL NULL NULL # #
uca1400_icelandic_nopad_ai_cs NULL NULL NULL # #
uca1400_icelandic_nopad_as_ci NULL NULL NULL # #
uca1400_icelandic_nopad_as_cs NULL NULL NULL # #
uca1400_latvian_ai_ci NULL NULL NULL # #
uca1400_latvian_ai_cs NULL NULL NULL # #
uca1400_latvian_as_ci NULL NULL NULL # #
uca1400_latvian_as_cs NULL NULL NULL # #
uca1400_latvian_nopad_ai_ci NULL NULL NULL # #
uca1400_latvian_nopad_ai_cs NULL NULL NULL # #
uca1400_latvian_nopad_as_ci NULL NULL NULL # #
uca1400_latvian_nopad_as_cs NULL NULL NULL # #
uca1400_romanian_ai_ci NULL NULL NULL # #
uca1400_romanian_ai_cs NULL NULL NULL # #
uca1400_romanian_as_ci NULL NULL NULL # #
uca1400_romanian_as_cs NULL NULL NULL # #
uca1400_romanian_nopad_ai_ci NULL NULL NULL # #
uca1400_romanian_nopad_ai_cs NULL NULL NULL # #
uca1400_romanian_nopad_as_ci NULL NULL NULL # #
uca1400_romanian_nopad_as_cs NULL NULL NULL # #
uca1400_slovenian_ai_ci NULL NULL NULL # #
uca1400_slovenian_ai_cs NULL NULL NULL # #
uca1400_slovenian_as_ci NULL NULL NULL # #
uca1400_slovenian_as_cs NULL NULL NULL # #
uca1400_slovenian_nopad_ai_ci NULL NULL NULL # #
uca1400_slovenian_nopad_ai_cs NULL NULL NULL # #
uca1400_slovenian_nopad_as_ci NULL NULL NULL # #
uca1400_slovenian_nopad_as_cs NULL NULL NULL # #
uca1400_polish_ai_ci NULL NULL NULL # #
uca1400_polish_ai_cs NULL NULL NULL # #
uca1400_polish_as_ci NULL NULL NULL # #
uca1400_polish_as_cs NULL NULL NULL # #
uca1400_polish_nopad_ai_ci NULL NULL NULL # #
uca1400_polish_nopad_ai_cs NULL NULL NULL # #
uca1400_polish_nopad_as_ci NULL NULL NULL # #
uca1400_polish_nopad_as_cs NULL NULL NULL # #
uca1400_estonian_ai_ci NULL NULL NULL # #
uca1400_estonian_ai_cs NULL NULL NULL # #
uca1400_estonian_as_ci NULL NULL NULL # #
uca1400_estonian_as_cs NULL NULL NULL # #
uca1400_estonian_nopad_ai_ci NULL NULL NULL # #
uca1400_estonian_nopad_ai_cs NULL NULL NULL # #
uca1400_estonian_nopad_as_ci NULL NULL NULL # #
uca1400_estonian_nopad_as_cs NULL NULL NULL # #
uca1400_spanish_ai_ci NULL NULL NULL # #
uca1400_spanish_ai_cs NULL NULL NULL # #
uca1400_spanish_as_ci NULL NULL NULL # #
uca1400_spanish_as_cs NULL NULL NULL # #
uca1400_spanish_nopad_ai_ci NULL NULL NULL # #
uca1400_spanish_nopad_ai_cs NULL NULL NULL # #
uca1400_spanish_nopad_as_ci NULL NULL NULL # #
uca1400_spanish_nopad_as_cs NULL NULL NULL # #
uca1400_swedish_ai_ci NULL NULL NULL # #
uca1400_swedish_ai_cs NULL NULL NULL # #
uca1400_swedish_as_ci NULL NULL NULL # #
uca1400_swedish_as_cs NULL NULL NULL # #
uca1400_swedish_nopad_ai_ci NULL NULL NULL # #
uca1400_swedish_nopad_ai_cs NULL NULL NULL # #
uca1400_swedish_nopad_as_ci NULL NULL NULL # #
uca1400_swedish_nopad_as_cs NULL NULL NULL # #
uca1400_turkish_ai_ci NULL NULL NULL # #
uca1400_turkish_ai_cs NULL NULL NULL # #
uca1400_turkish_as_ci NULL NULL NULL # #
uca1400_turkish_as_cs NULL NULL NULL # #
uca1400_turkish_nopad_ai_ci NULL NULL NULL # #
uca1400_turkish_nopad_ai_cs NULL NULL NULL # #
uca1400_turkish_nopad_as_ci NULL NULL NULL # #
uca1400_turkish_nopad_as_cs NULL NULL NULL # #
uca1400_czech_ai_ci NULL NULL NULL # #
uca1400_czech_ai_cs NULL NULL NULL # #
uca1400_czech_as_ci NULL NULL NULL # #
uca1400_czech_as_cs NULL NULL NULL # #
uca1400_czech_nopad_ai_ci NULL NULL NULL # #
uca1400_czech_nopad_ai_cs NULL NULL NULL # #
uca1400_czech_nopad_as_ci NULL NULL NULL # #
uca1400_czech_nopad_as_cs NULL NULL NULL # #
uca1400_danish_ai_ci NULL NULL NULL # #
uca1400_danish_ai_cs NULL NULL NULL # #
uca1400_danish_as_ci NULL NULL NULL # #
uca1400_danish_as_cs NULL NULL NULL # #
uca1400_danish_nopad_ai_ci NULL NULL NULL # #
uca1400_danish_nopad_ai_cs NULL NULL NULL # #
uca1400_danish_nopad_as_ci NULL NULL NULL # #
uca1400_danish_nopad_as_cs NULL NULL NULL # #
uca1400_lithuanian_ai_ci NULL NULL NULL # #
uca1400_lithuanian_ai_cs NULL NULL NULL # #
uca1400_lithuanian_as_ci NULL NULL NULL # #
uca1400_lithuanian_as_cs NULL NULL NULL # #
uca1400_lithuanian_nopad_ai_ci NULL NULL NULL # #
uca1400_lithuanian_nopad_ai_cs NULL NULL NULL # #
uca1400_lithuanian_nopad_as_ci NULL NULL NULL # #
uca1400_lithuanian_nopad_as_cs NULL NULL NULL # #
uca1400_slovak_ai_ci NULL NULL NULL # #
uca1400_slovak_ai_cs NULL NULL NULL # #
uca1400_slovak_as_ci NULL NULL NULL # #
uca1400_slovak_as_cs NULL NULL NULL # #
uca1400_slovak_nopad_ai_ci NULL NULL NULL # #
uca1400_slovak_nopad_ai_cs NULL NULL NULL # #
uca1400_slovak_nopad_as_ci NULL NULL NULL # #
uca1400_slovak_nopad_as_cs NULL NULL NULL # #
uca1400_spanish2_ai_ci NULL NULL NULL # #
uca1400_spanish2_ai_cs NULL NULL NULL # #
uca1400_spanish2_as_ci NULL NULL NULL # #
uca1400_spanish2_as_cs NULL NULL NULL # #
uca1400_spanish2_nopad_ai_ci NULL NULL NULL # #
uca1400_spanish2_nopad_ai_cs NULL NULL NULL # #
uca1400_spanish2_nopad_as_ci NULL NULL NULL # #
uca1400_spanish2_nopad_as_cs NULL NULL NULL # #
uca1400_roman_ai_ci NULL NULL NULL # #
uca1400_roman_ai_cs NULL NULL NULL # #
uca1400_roman_as_ci NULL NULL NULL # #
uca1400_roman_as_cs NULL NULL NULL # #
uca1400_roman_nopad_ai_ci NULL NULL NULL # #
uca1400_roman_nopad_ai_cs NULL NULL NULL # #
uca1400_roman_nopad_as_ci NULL NULL NULL # #
uca1400_roman_nopad_as_cs NULL NULL NULL # #
uca1400_persian_ai_ci NULL NULL NULL # #
uca1400_persian_ai_cs NULL NULL NULL # #
uca1400_persian_as_ci NULL NULL NULL # #
uca1400_persian_as_cs NULL NULL NULL # #
uca1400_persian_nopad_ai_ci NULL NULL NULL # #
uca1400_persian_nopad_ai_cs NULL NULL NULL # #
uca1400_persian_nopad_as_ci NULL NULL NULL # #
uca1400_persian_nopad_as_cs NULL NULL NULL # #
uca1400_esperanto_ai_ci NULL NULL NULL # #
uca1400_esperanto_ai_cs NULL NULL NULL # #
uca1400_esperanto_as_ci NULL NULL NULL # #
uca1400_esperanto_as_cs NULL NULL NULL # #
uca1400_esperanto_nopad_ai_ci NULL NULL NULL # #
uca1400_esperanto_nopad_ai_cs NULL NULL NULL # #
uca1400_esperanto_nopad_as_ci NULL NULL NULL # #
uca1400_esperanto_nopad_as_cs NULL NULL NULL # #
uca1400_hungarian_ai_ci NULL NULL NULL # #
uca1400_hungarian_ai_cs NULL NULL NULL # #
uca1400_hungarian_as_ci NULL NULL NULL # #
uca1400_hungarian_as_cs NULL NULL NULL # #
uca1400_hungarian_nopad_ai_ci NULL NULL NULL # #
uca1400_hungarian_nopad_ai_cs NULL NULL NULL # #
uca1400_hungarian_nopad_as_ci NULL NULL NULL # #
uca1400_hungarian_nopad_as_cs NULL NULL NULL # #
uca1400_sinhala_ai_ci NULL NULL NULL # #
uca1400_sinhala_ai_cs NULL NULL NULL # #
uca1400_sinhala_as_ci NULL NULL NULL # #
uca1400_sinhala_as_cs NULL NULL NULL # #
uca1400_sinhala_nopad_ai_ci NULL NULL NULL # #
uca1400_sinhala_nopad_ai_cs NULL NULL NULL # #
uca1400_sinhala_nopad_as_ci NULL NULL NULL # #
uca1400_sinhala_nopad_as_cs NULL NULL NULL # #
uca1400_german2_ai_ci NULL NULL NULL # #
uca1400_german2_ai_cs NULL NULL NULL # #
uca1400_german2_as_ci NULL NULL NULL # #
uca1400_german2_as_cs NULL NULL NULL # #
uca1400_german2_nopad_ai_ci NULL NULL NULL # #
uca1400_german2_nopad_ai_cs NULL NULL NULL # #
uca1400_german2_nopad_as_ci NULL NULL NULL # #
uca1400_german2_nopad_as_cs NULL NULL NULL # #
uca1400_vietnamese_ai_ci NULL NULL NULL # #
uca1400_vietnamese_ai_cs NULL NULL NULL # #
uca1400_vietnamese_as_ci NULL NULL NULL # #
uca1400_vietnamese_as_cs NULL NULL NULL # #
uca1400_vietnamese_nopad_ai_ci NULL NULL NULL # #
uca1400_vietnamese_nopad_ai_cs NULL NULL NULL # #
uca1400_vietnamese_nopad_as_ci NULL NULL NULL # #
uca1400_vietnamese_nopad_as_cs NULL NULL NULL # #
uca1400_croatian_ai_ci NULL NULL NULL # #
uca1400_croatian_ai_cs NULL NULL NULL # #
uca1400_croatian_as_ci NULL NULL NULL # #
uca1400_croatian_as_cs NULL NULL NULL # #
uca1400_croatian_nopad_ai_ci NULL NULL NULL # #
uca1400_croatian_nopad_ai_cs NULL NULL NULL # #
uca1400_croatian_nopad_as_ci NULL NULL NULL # #
uca1400_croatian_nopad_as_cs NULL NULL NULL # #
cp1251_bulgarian_ci cp1251 14 # #
cp1251_ukrainian_ci cp1251 23 # #
cp1251_bin cp1251 50 # #
......
......@@ -31,11 +31,11 @@ AND (collation_name LIKE CONCAT(character_set_name,'_general_ci')
OR
collation_name LIKE CONCAT(character_set_name,'_bin'))
ORDER BY collation_name, character_set_name;
COLLATION_NAME CHARACTER_SET_NAME
latin1_bin latin1
latin1_general_ci latin1
utf8mb3_bin utf8mb3
utf8mb3_general_ci utf8mb3
COLLATION_NAME CHARACTER_SET_NAME FULL_COLLATION_NAME ID IS_DEFAULT
latin1_bin latin1 latin1_bin 47
latin1_general_ci latin1 latin1_general_ci 48
utf8mb3_bin utf8mb3 utf8mb3_bin 83
utf8mb3_general_ci utf8mb3 utf8mb3_general_ci 33 Yes
connection default;
disconnect con;
DROP USER dbdict_test@localhost;
......@@ -29,21 +29,21 @@ DROP FUNCTION test.f1;
DESCRIBE information_schema.CHARACTER_SETS;
Field Type Null Key Default Extra
CHARACTER_SET_NAME varchar(32) NO NULL
DEFAULT_COLLATE_NAME varchar(32) NO NULL
DEFAULT_COLLATE_NAME varchar(64) NO NULL
DESCRIPTION varchar(60) NO NULL
MAXLEN bigint(3) NO NULL
SHOW CREATE TABLE information_schema.CHARACTER_SETS;
Table Create Table
CHARACTER_SETS CREATE TEMPORARY TABLE `CHARACTER_SETS` (
`CHARACTER_SET_NAME` varchar(32) NOT NULL,
`DEFAULT_COLLATE_NAME` varchar(32) NOT NULL,
`DEFAULT_COLLATE_NAME` varchar(64) NOT NULL,
`DESCRIPTION` varchar(60) NOT NULL,
`MAXLEN` bigint(3) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3
SHOW COLUMNS FROM information_schema.CHARACTER_SETS;
Field Type Null Key Default Extra
CHARACTER_SET_NAME varchar(32) NO NULL
DEFAULT_COLLATE_NAME varchar(32) NO NULL
DEFAULT_COLLATE_NAME varchar(64) NO NULL
DESCRIPTION varchar(60) NO NULL
MAXLEN bigint(3) NO NULL
# Testcases 3.2.2.2 and 3.2.2.3 are checked in suite/funcs_1/t/charset_collation*.test
......
......@@ -28,18 +28,27 @@ DROP FUNCTION test.f1;
#########################################################################
DESCRIBE information_schema.COLLATION_CHARACTER_SET_APPLICABILITY;
Field Type Null Key Default Extra
COLLATION_NAME varchar(32) NO NULL
COLLATION_NAME varchar(64) NO NULL
CHARACTER_SET_NAME varchar(32) NO NULL
FULL_COLLATION_NAME varchar(64) NO NULL
ID bigint(11) NO NULL
IS_DEFAULT varchar(3) NO NULL
SHOW CREATE TABLE information_schema.COLLATION_CHARACTER_SET_APPLICABILITY;
Table Create Table
COLLATION_CHARACTER_SET_APPLICABILITY CREATE TEMPORARY TABLE `COLLATION_CHARACTER_SET_APPLICABILITY` (
`COLLATION_NAME` varchar(32) NOT NULL,
`CHARACTER_SET_NAME` varchar(32) NOT NULL
`COLLATION_NAME` varchar(64) NOT NULL,
`CHARACTER_SET_NAME` varchar(32) NOT NULL,
`FULL_COLLATION_NAME` varchar(64) NOT NULL,
`ID` bigint(11) NOT NULL,
`IS_DEFAULT` varchar(3) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3
SHOW COLUMNS FROM information_schema.COLLATION_CHARACTER_SET_APPLICABILITY;
Field Type Null Key Default Extra
COLLATION_NAME varchar(32) NO NULL
COLLATION_NAME varchar(64) NO NULL
CHARACTER_SET_NAME varchar(32) NO NULL
FULL_COLLATION_NAME varchar(64) NO NULL
ID bigint(11) NO NULL
IS_DEFAULT varchar(3) NO NULL
# Testcases 3.2.4.2 and 3.2.4.3 are checked in suite/funcs_1/t/charset_collation*.test
########################################################################
# Testcases 3.2.1.3-3.2.1.5 + 3.2.1.8-3.2.1.12: INSERT/UPDATE/DELETE and
......
......@@ -28,28 +28,28 @@ DROP FUNCTION test.f1;
#########################################################################
DESCRIBE information_schema.COLLATIONS;
Field Type Null Key Default Extra
COLLATION_NAME varchar(32) NO NULL
CHARACTER_SET_NAME varchar(32) NO NULL
ID bigint(11) NO NULL
IS_DEFAULT varchar(3) NO NULL
COLLATION_NAME varchar(64) NO NULL
CHARACTER_SET_NAME varchar(32) YES NULL
ID bigint(11) YES NULL
IS_DEFAULT varchar(3) YES NULL
IS_COMPILED varchar(3) NO NULL
SORTLEN bigint(3) NO NULL
SHOW CREATE TABLE information_schema.COLLATIONS;
Table Create Table
COLLATIONS CREATE TEMPORARY TABLE `COLLATIONS` (
`COLLATION_NAME` varchar(32) NOT NULL,
`CHARACTER_SET_NAME` varchar(32) NOT NULL,
`ID` bigint(11) NOT NULL,
`IS_DEFAULT` varchar(3) NOT NULL,
`COLLATION_NAME` varchar(64) NOT NULL,
`CHARACTER_SET_NAME` varchar(32),
`ID` bigint(11),
`IS_DEFAULT` varchar(3),
`IS_COMPILED` varchar(3) NOT NULL,
`SORTLEN` bigint(3) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3
SHOW COLUMNS FROM information_schema.COLLATIONS;
Field Type Null Key Default Extra
COLLATION_NAME varchar(32) NO NULL
CHARACTER_SET_NAME varchar(32) NO NULL
ID bigint(11) NO NULL
IS_DEFAULT varchar(3) NO NULL
COLLATION_NAME varchar(64) NO NULL
CHARACTER_SET_NAME varchar(32) YES NULL
ID bigint(11) YES NULL
IS_DEFAULT varchar(3) YES NULL
IS_COMPILED varchar(3) NO NULL
SORTLEN bigint(3) NO NULL
# Testcases 3.2.3.2 and 3.2.3.3 are checked in suite/funcs_1/t/charset_collation*.test
......
......@@ -42,7 +42,7 @@ NUMERIC_PRECISION bigint(21) unsigned YES NULL
NUMERIC_SCALE bigint(21) unsigned YES NULL
DATETIME_PRECISION bigint(21) unsigned YES NULL
CHARACTER_SET_NAME varchar(32) YES NULL
COLLATION_NAME varchar(32) YES NULL
COLLATION_NAME varchar(64) YES NULL
COLUMN_TYPE longtext NO NULL
COLUMN_KEY varchar(3) NO NULL
EXTRA varchar(80) NO NULL
......@@ -67,7 +67,7 @@ COLUMNS CREATE TEMPORARY TABLE `COLUMNS` (
`NUMERIC_SCALE` bigint(21) unsigned,
`DATETIME_PRECISION` bigint(21) unsigned,
`CHARACTER_SET_NAME` varchar(32),
`COLLATION_NAME` varchar(32),
`COLLATION_NAME` varchar(64),
`COLUMN_TYPE` longtext NOT NULL,
`COLUMN_KEY` varchar(3) NOT NULL,
`EXTRA` varchar(80) NOT NULL,
......@@ -92,7 +92,7 @@ NUMERIC_PRECISION bigint(21) unsigned YES NULL
NUMERIC_SCALE bigint(21) unsigned YES NULL
DATETIME_PRECISION bigint(21) unsigned YES NULL
CHARACTER_SET_NAME varchar(32) YES NULL
COLLATION_NAME varchar(32) YES NULL
COLLATION_NAME varchar(64) YES NULL
COLUMN_TYPE longtext NO NULL
COLUMN_KEY varchar(3) NO NULL
EXTRA varchar(80) NO NULL
......
......@@ -50,8 +50,8 @@ LAST_EXECUTED datetime YES NULL
EVENT_COMMENT varchar(64) NO NULL
ORIGINATOR bigint(10) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
COLLATION_CONNECTION varchar(32) NO NULL
DATABASE_COLLATION varchar(32) NO NULL
COLLATION_CONNECTION varchar(64) NO NULL
DATABASE_COLLATION varchar(64) NO NULL
SHOW CREATE TABLE information_schema.EVENTS;
Table Create Table
EVENTS CREATE TEMPORARY TABLE `EVENTS` (
......@@ -77,8 +77,8 @@ EVENTS CREATE TEMPORARY TABLE `EVENTS` (
`EVENT_COMMENT` varchar(64) NOT NULL,
`ORIGINATOR` bigint(10) NOT NULL,
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL,
`COLLATION_CONNECTION` varchar(32) NOT NULL,
`DATABASE_COLLATION` varchar(32) NOT NULL
`COLLATION_CONNECTION` varchar(64) NOT NULL,
`DATABASE_COLLATION` varchar(64) NOT NULL
) DEFAULT CHARSET=utf8mb3
SHOW COLUMNS FROM information_schema.EVENTS;
Field Type Null Key Default Extra
......@@ -104,8 +104,8 @@ LAST_EXECUTED datetime YES NULL
EVENT_COMMENT varchar(64) NO NULL
ORIGINATOR bigint(10) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
COLLATION_CONNECTION varchar(32) NO NULL
DATABASE_COLLATION varchar(32) NO NULL
COLLATION_CONNECTION varchar(64) NO NULL
DATABASE_COLLATION varchar(64) NO NULL
SELECT event_catalog, event_name, event_body, event_type, event_type,
status, on_completion
FROM information_schema.events
......
......@@ -58,8 +58,8 @@ SQL_MODE varchar(8192) NO NULL
ROUTINE_COMMENT longtext NO NULL
DEFINER varchar(384) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
COLLATION_CONNECTION varchar(32) NO NULL
DATABASE_COLLATION varchar(32) NO NULL
COLLATION_CONNECTION varchar(64) NO NULL
DATABASE_COLLATION varchar(64) NO NULL
SHOW CREATE TABLE information_schema.ROUTINES;
Table Create Table
ROUTINES CREATE TEMPORARY TABLE `ROUTINES` (
......@@ -92,8 +92,8 @@ ROUTINES CREATE TEMPORARY TABLE `ROUTINES` (
`ROUTINE_COMMENT` longtext NOT NULL,
`DEFINER` varchar(384) NOT NULL,
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL,
`COLLATION_CONNECTION` varchar(32) NOT NULL,
`DATABASE_COLLATION` varchar(32) NOT NULL
`COLLATION_CONNECTION` varchar(64) NOT NULL,
`DATABASE_COLLATION` varchar(64) NOT NULL
) DEFAULT CHARSET=utf8mb3
SHOW COLUMNS FROM information_schema.ROUTINES;
Field Type Null Key Default Extra
......@@ -126,8 +126,8 @@ SQL_MODE varchar(8192) NO NULL
ROUTINE_COMMENT longtext NO NULL
DEFINER varchar(384) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
COLLATION_CONNECTION varchar(32) NO NULL
DATABASE_COLLATION varchar(32) NO NULL
COLLATION_CONNECTION varchar(64) NO NULL
DATABASE_COLLATION varchar(64) NO NULL
USE test;
DROP PROCEDURE IF EXISTS sp_for_routines;
DROP FUNCTION IF EXISTS function_for_routines;
......
......@@ -58,8 +58,8 @@ SQL_MODE varchar(8192) NO NULL
ROUTINE_COMMENT longtext NO NULL
DEFINER varchar(384) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
COLLATION_CONNECTION varchar(32) NO NULL
DATABASE_COLLATION varchar(32) NO NULL
COLLATION_CONNECTION varchar(64) NO NULL
DATABASE_COLLATION varchar(64) NO NULL
SHOW CREATE TABLE information_schema.ROUTINES;
Table Create Table
ROUTINES CREATE TEMPORARY TABLE `ROUTINES` (
......@@ -92,8 +92,8 @@ ROUTINES CREATE TEMPORARY TABLE `ROUTINES` (
`ROUTINE_COMMENT` longtext NOT NULL,
`DEFINER` varchar(384) NOT NULL,
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL,
`COLLATION_CONNECTION` varchar(32) NOT NULL,
`DATABASE_COLLATION` varchar(32) NOT NULL
`COLLATION_CONNECTION` varchar(64) NOT NULL,
`DATABASE_COLLATION` varchar(64) NOT NULL
) DEFAULT CHARSET=utf8mb3
SHOW COLUMNS FROM information_schema.ROUTINES;
Field Type Null Key Default Extra
......@@ -126,8 +126,8 @@ SQL_MODE varchar(8192) NO NULL
ROUTINE_COMMENT longtext NO NULL
DEFINER varchar(384) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
COLLATION_CONNECTION varchar(32) NO NULL
DATABASE_COLLATION varchar(32) NO NULL
COLLATION_CONNECTION varchar(64) NO NULL
DATABASE_COLLATION varchar(64) NO NULL
USE test;
DROP PROCEDURE IF EXISTS sp_for_routines;
DROP FUNCTION IF EXISTS function_for_routines;
......
......@@ -31,7 +31,7 @@ Field Type Null Key Default Extra
CATALOG_NAME varchar(512) NO NULL
SCHEMA_NAME varchar(64) NO NULL
DEFAULT_CHARACTER_SET_NAME varchar(32) NO NULL
DEFAULT_COLLATION_NAME varchar(32) NO NULL
DEFAULT_COLLATION_NAME varchar(64) NO NULL
SQL_PATH varchar(512) YES NULL
SCHEMA_COMMENT varchar(1024) NO NULL
SHOW CREATE TABLE information_schema.SCHEMATA;
......@@ -40,7 +40,7 @@ SCHEMATA CREATE TEMPORARY TABLE `SCHEMATA` (
`CATALOG_NAME` varchar(512) NOT NULL,
`SCHEMA_NAME` varchar(64) NOT NULL,
`DEFAULT_CHARACTER_SET_NAME` varchar(32) NOT NULL,
`DEFAULT_COLLATION_NAME` varchar(32) NOT NULL,
`DEFAULT_COLLATION_NAME` varchar(64) NOT NULL,
`SQL_PATH` varchar(512),
`SCHEMA_COMMENT` varchar(1024) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3
......@@ -49,7 +49,7 @@ Field Type Null Key Default Extra
CATALOG_NAME varchar(512) NO NULL
SCHEMA_NAME varchar(64) NO NULL
DEFAULT_CHARACTER_SET_NAME varchar(32) NO NULL
DEFAULT_COLLATION_NAME varchar(32) NO NULL
DEFAULT_COLLATION_NAME varchar(64) NO NULL
SQL_PATH varchar(512) YES NULL
SCHEMA_COMMENT varchar(1024) NO NULL
SELECT catalog_name, schema_name, sql_path
......
......@@ -31,7 +31,7 @@ Field Type Null Key Default Extra
CATALOG_NAME varchar(512) NO NULL
SCHEMA_NAME varchar(64) NO NULL
DEFAULT_CHARACTER_SET_NAME varchar(32) NO NULL
DEFAULT_COLLATION_NAME varchar(32) NO NULL
DEFAULT_COLLATION_NAME varchar(64) NO NULL
SQL_PATH varchar(512) YES NULL
SCHEMA_COMMENT varchar(1024) NO NULL
SHOW CREATE TABLE information_schema.SCHEMATA;
......@@ -40,7 +40,7 @@ SCHEMATA CREATE TEMPORARY TABLE `SCHEMATA` (
`CATALOG_NAME` varchar(512) NOT NULL,
`SCHEMA_NAME` varchar(64) NOT NULL,
`DEFAULT_CHARACTER_SET_NAME` varchar(32) NOT NULL,
`DEFAULT_COLLATION_NAME` varchar(32) NOT NULL,
`DEFAULT_COLLATION_NAME` varchar(64) NOT NULL,
`SQL_PATH` varchar(512),
`SCHEMA_COMMENT` varchar(1024) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3
......@@ -49,7 +49,7 @@ Field Type Null Key Default Extra
CATALOG_NAME varchar(512) NO NULL
SCHEMA_NAME varchar(64) NO NULL
DEFAULT_CHARACTER_SET_NAME varchar(32) NO NULL
DEFAULT_COLLATION_NAME varchar(32) NO NULL
DEFAULT_COLLATION_NAME varchar(64) NO NULL
SQL_PATH varchar(512) YES NULL
SCHEMA_COMMENT varchar(1024) NO NULL
SELECT catalog_name, schema_name, sql_path
......
......@@ -45,7 +45,7 @@ AUTO_INCREMENT bigint(21) unsigned YES NULL
CREATE_TIME datetime YES NULL
UPDATE_TIME datetime YES NULL
CHECK_TIME datetime YES NULL
TABLE_COLLATION varchar(32) YES NULL
TABLE_COLLATION varchar(64) YES NULL
CHECKSUM bigint(21) unsigned YES NULL
CREATE_OPTIONS varchar(2048) YES NULL
TABLE_COMMENT varchar(2048) NO NULL
......@@ -71,7 +71,7 @@ TABLES CREATE TEMPORARY TABLE `TABLES` (
`CREATE_TIME` datetime,
`UPDATE_TIME` datetime,
`CHECK_TIME` datetime,
`TABLE_COLLATION` varchar(32),
`TABLE_COLLATION` varchar(64),
`CHECKSUM` bigint(21) unsigned,
`CREATE_OPTIONS` varchar(2048),
`TABLE_COMMENT` varchar(2048) NOT NULL,
......@@ -97,7 +97,7 @@ AUTO_INCREMENT bigint(21) unsigned YES NULL
CREATE_TIME datetime YES NULL
UPDATE_TIME datetime YES NULL
CHECK_TIME datetime YES NULL
TABLE_COLLATION varchar(32) YES NULL
TABLE_COLLATION varchar(64) YES NULL
CHECKSUM bigint(21) unsigned YES NULL
CREATE_OPTIONS varchar(2048) YES NULL
TABLE_COMMENT varchar(2048) NO NULL
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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