Hi, Alexander,
No comments about actual code changes, only about tests.
Please, see below
On Jun 12, Alexander Barkov wrote:
> revision-id: 98ebe0a3afc (mariadb-11.5.1-12-g98ebe0a3afc)
> parent(s): 186a30de58b
> author: Alexander Barkov
> committer: Alexander Barkov
> timestamp: 2024-06-11 14:17:11 +0400
> message:
>
> MDEV-19123 Change default charset from latin1 to utf8mb4
>
> Changing the default server character set from latin1 to utf8mb4.
> diff --git a/mysql-test/main/column_compression.test
> b/mysql-test/main/column_compression.test
> --- a/mysql-test/main/column_compression.test
> +++ b/mysql-test/main/column_compression.test
> @@ -9,20 +9,20 @@ let $typec= BLOB COMPRESSED;
> let $typeu= BLOB;
> --source column_compression.inc
>
> -let $typec= TEXT COMPRESSED;
> -let $typeu= TEXT;
> +let $typec= TEXT COMPRESSED CHARACTER SET latin1;
> +let $typeu= TEXT CHARACTER SET latin1;
why?
> --source column_compression.inc
>
> let $typec= VARBINARY(10000) COMPRESSED;
> let $typeu= VARBINARY(10000);
> --source column_compression.inc
>
> -let $typec= VARCHAR(10000) COMPRESSED;
> -let $typeu= VARCHAR(10000);
> +let $typec= VARCHAR(10000) COMPRESSED CHARACTER SET latin1;
> +let $typeu= VARCHAR(10000) CHARACTER SET latin1;
> --source column_compression.inc
>
> let $typec= TEXT COMPRESSED CHARSET ucs2;
> -let $typeu= TEXT;
> +let $typeu= TEXT CHARACTER SET latin1;
> --source column_compression.inc
>
> SET column_compression_zlib_wrap=DEFAULT;
> diff --git a/mysql-test/main/create.result b/mysql-test/main/create.result
> --- a/mysql-test/main/create.result
> +++ b/mysql-test/main/create.result
> @@ -506,9 +506,9 @@ FROM t1;
> SHOW CREATE TABLE t2;
> Table Create Table
> t2 CREATE TABLE `t2` (
> - `ifnull(c_tinytext, CAST('yet another binary data' AS BINARY))` tinyblob
> DEFAULT NULL,
> - `ifnull(c_text, CAST('yet another binary data' AS BINARY))` blob
> DEFAULT NULL,
> - `ifnull(c_mediumtext, CAST('yet another binary data' AS BINARY))`
> mediumblob DEFAULT NULL,
> + `ifnull(c_tinytext, CAST('yet another binary data' AS BINARY))` blob
> DEFAULT NULL,
> + `ifnull(c_text, CAST('yet another binary data' AS BINARY))`
> mediumblob DEFAULT NULL,
> + `ifnull(c_mediumtext, CAST('yet another binary data' AS BINARY))` longblob
> DEFAULT NULL,
looks wrong
UPD: there were more changes like this below, I didn't comment on them
> `ifnull(c_longtext, CAST('yet another binary data' AS BINARY))` longblob
> DEFAULT NULL
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
> DROP TABLE t2;
> diff --git a/mysql-test/main/ctype_utf8_def_upgrade.result
> b/mysql-test/main/ctype_utf8_def_upgrade.result
> --- a/mysql-test/main/ctype_utf8_def_upgrade.result
> +++ b/mysql-test/main/ctype_utf8_def_upgrade.result
> @@ -61,23 +61,23 @@ t1 CREATE TABLE `t1` (
> PRIMARY KEY (`Host`,`Db`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
> COMMENT='Host privileges; Merged with database privileges'
> DROP TABLE t1;
> -SET @@character_set_database=DEFAULT;
> +SET @@collation_database=DEFAULT;
why?
> # Now do the same, but doing 'ALTER DATABASE' to create the db.opt file,
> # instead of setting variables directly.
> # Emulate a pre-4.1 database without db.opt
> SHOW CREATE DATABASE db1;
> Database Create Database
> -db1 CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb3 COLLATE
> utf8mb3_uca1400_ai_ci */
> +db1 CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb3 COLLATE
> utf8mb3_general_ci */
> USE db1;
> -SELECT @@character_set_database, 'taken from defaults' AS comment;
> -@@character_set_database comment
> -utf8mb3 taken from defaults
> +SELECT @@collation_database, 'taken from defaults' AS comment;
> +@@collation_database comment
> +utf8mb3_general_ci taken from defaults
> USE test;
> ALTER DATABASE db1 DEFAULT CHARACTER SET latin1;
> USE db1;
> -SELECT @@character_set_database, 'taken from db.opt' AS comment;
> -@@character_set_database comment
> -latin1 taken from db.opt
> +SELECT @@collation_database, 'taken from db.opt' AS comment;
> +@@collation_database comment
> +latin1_swedish_ci taken from db.opt
> SELECT COUNT(*) FROM t1;
> ERROR HY000: Got error 190 "Incompatible key or row definition between the
> MariaDB .frm file and the information in the storage engine. You can try
> REPAIR TABLE ... USE_FRM possibly followed by ALTER TABLE ... FORCE or dump
> and restore the table to fix this" from storage engine MyISAM
> REPAIR TABLE t1 USE_FRM;
> diff --git a/mysql-test/main/endspace.test b/mysql-test/main/endspace.test
> --- a/mysql-test/main/endspace.test
> +++ b/mysql-test/main/endspace.test
> @@ -13,7 +13,7 @@ drop table if exists t1;
> # Test MyISAM tables.
> #
>
> -create table t1 (text1 varchar(32) not NULL, KEY key1 (text1));
> +create table t1 (text1 varchar(32) not NULL, KEY key1 (text1))
> charset=latin1;
why is that?
> insert into t1 values ('teststring'), ('nothing'), ('teststring\t');
> check table t1;
> select * from t1 ignore key (key1) where text1='teststring' or
> diff --git a/mysql-test/main/func_compress.test
> b/mysql-test/main/func_compress.test
> --- a/mysql-test/main/func_compress.test
> +++ b/mysql-test/main/func_compress.test
> @@ -1,5 +1,9 @@
> -- source include/have_compress.inc
> -- source include/have_normal_zlib.inc
> +
> +--source include/test_db_charset_latin1.inc
same as in column_compression.test ?
> +
> +
> #
> # Test for compress and uncompress functions:
> #
> diff --git a/mysql-test/main/long_unique.result
> b/mysql-test/main/long_unique.result
> --- a/mysql-test/main/long_unique.result
> +++ b/mysql-test/main/long_unique.result
> @@ -41,7 +41,7 @@ Ignored NO
>
> MyISAM file: DATADIR/test/t1
> Record format: Packed
> -Character set: latin1_swedish_ci (8)
> +Character set: ? (0)
huh?
> Data records: 10 Deleted blocks: 0
> Recordlength: 12
>
> diff --git a/mysql-test/main/mysqlbinlog_row_compressed.result
> b/mysql-test/main/mysqlbinlog_row_compressed.result
> --- a/mysql-test/main/mysqlbinlog_row_compressed.result
> +++ b/mysql-test/main/mysqlbinlog_row_compressed.result
> @@ -40,9 +40,10 @@ SET @@session.sql_mode=#/*!*/;
> SET @@session.auto_increment_increment=1,
> @@session.auto_increment_offset=1/*!*/;
> /*!\C latin1 *//*!*/;
> SET
> @@session.character_set_client=latin1,@@session.collation_connection=8,@@session.collation_server=#/*!*/;
> +SET
> @@session.character_set_collations='utf8mb3=utf8mb3_uca1400_ai_ci,ucs2=ucs2_uca1400_ai_ci,utf8mb4=utf8mb4_uca1400_ai_ci,utf16=utf16_uca1400_ai_ci,utf32=utf32_uca1400_ai_ci'/*!*/;
why did this appear?
> SET @@session.lc_time_names=0/*!*/;
> SET @@session.collation_database=DEFAULT/*!*/;
> -CREATE TABLE t1 (pk INT PRIMARY KEY, f1 INT, f2 INT, f3 TINYINT, f4
> MEDIUMINT, f5 BIGINT, f6 INT, f7 INT, f8 char(1))
> +CREATE TABLE t1 (pk INT PRIMARY KEY, f1 INT, f2 INT, f3 TINYINT, f4
> MEDIUMINT, f5 BIGINT, f6 INT, f7 INT, f8 char(1)) CHARSET=latin1
> /*!*/;
> # at <pos>
> #<date> server id 1 end_log_pos # CRC32 XXX GTID 0-1-2 ddl
> thread_id=TID
> diff --git a/mysql-test/main/sp.result b/mysql-test/main/sp.result
> --- a/mysql-test/main/sp.result
> +++ b/mysql-test/main/sp.result
> @@ -6800,6 +6800,8 @@ DROP FUNCTION IF EXISTS f2;
> #
>
> CREATE FUNCTION f1() RETURNS VARCHAR(65525) RETURN 'Hello';
> +Warnings:
> +Note 1246 Converting column '' from VARCHAR to TEXT
this could use latin1, I suppose
>
> CREATE FUNCTION f2() RETURNS TINYINT RETURN 1;
>
> diff --git a/mysql-test/suite/binlog_encryption/rpl_special_charset.opt
> b/mysql-test/suite/binlog_encryption/rpl_special_charset.opt
> --- a/mysql-test/suite/binlog_encryption/rpl_special_charset.opt
> +++ b/mysql-test/suite/binlog_encryption/rpl_special_charset.opt
> @@ -1 +1 @@
> ---character-set-server=utf16
> +--character-set-server=utf16 --collation-server=utf16_general_ci
why?
> diff --git a/mysql-test/suite/federated/assisted_discovery.test
> b/mysql-test/suite/federated/assisted_discovery.test
> --- a/mysql-test/suite/federated/assisted_discovery.test
> +++ b/mysql-test/suite/federated/assisted_discovery.test
> @@ -38,7 +38,7 @@ create table t1 (
> d varchar(4096) not null,
> primary key (a),
> key (b,c,d(255))
> -);
> +) CHARSET=latin1;
why?
> show create table t1;
>
> connection master;
> diff --git a/mysql-test/suite/funcs_1/r/is_columns_innodb.result
> b/mysql-test/suite/funcs_1/r/is_columns_innodb.result
> --- a/mysql-test/suite/funcs_1/r/is_columns_innodb.result
> +++ b/mysql-test/suite/funcs_1/r/is_columns_innodb.result
> @@ -739,6 +740,9 @@ WHERE table_schema LIKE 'test%'
> AND CHARACTER_OCTET_LENGTH / CHARACTER_MAXIMUM_LENGTH <> 1
> ORDER BY CHARACTER_SET_NAME, COLLATION_NAME, COL_CML;
> COL_CML DATA_TYPE CHARACTER_SET_NAME COLLATION_NAME
> +4.0000 char utf8mb4 utf8mb4_uca1400_ai_ci
> +4.0000 enum utf8mb4 utf8mb4_uca1400_ai_ci
> +4.0000 set utf8mb4 utf8mb4_uca1400_ai_ci
I suppose this changed the intention of the test
> Warnings:
> Warning 1365 Division by 0
> Warning 1365 Division by 0
> diff --git a/mysql-test/suite/gcol/r/innodb_virtual_index.result
> b/mysql-test/suite/gcol/r/innodb_virtual_index.result
> --- a/mysql-test/suite/gcol/r/innodb_virtual_index.result
> +++ b/mysql-test/suite/gcol/r/innodb_virtual_index.result
> @@ -114,7 +114,7 @@ KEY `vbidxcol` (`vbidxcol`),
> KEY `a_2` (`a`,`vbidxcol`),
> KEY `vbidxcol_2` (`vbidxcol`),
> FULLTEXT KEY `ftsic` (`c`,`b`)
> -) ENGINE=InnoDB;
> +) ENGINE=InnoDB CHARSET=latin1;
why latin1 everywhere in this file?
> Warnings:
> Note 1831 Duplicate index `vbidxcol_2`. This is deprecated and will be
> disallowed in a future release
> ALTER TABLE ibstd_08 ADD COLUMN nc07006 BIGINT AUTO_INCREMENT NOT NULL ,
> ADD KEY auto_nc07006(nc07006);
> diff --git a/mysql-test/suite/innodb/r/online_table_rebuild.result
> b/mysql-test/suite/innodb/r/online_table_rebuild.result
> --- a/mysql-test/suite/innodb/r/online_table_rebuild.result
> +++ b/mysql-test/suite/innodb/r/online_table_rebuild.result
> @@ -10,7 +10,7 @@ INSERT INTO t1 VALUES(2, repeat('b', 100), repeat('a',
> 100));
> COMMIT;
> SET DEBUG_SYNC="now SIGNAL dml_commit";
> connection default;
> -ERROR 23000: Duplicate entry 'bbbbbbbbbb' for key 'f2'
> +ERROR 23000: Duplicate entry 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' for
> key 'f2'
why?
> connection default;
> SET DEBUG_SYNC="inplace_after_index_build SIGNAL dml_start WAIT_FOR
> dml_commit";
> ALTER TABLE t1 ADD PRIMARY KEY(f1);
> diff --git a/mysql-test/suite/innodb/t/alter_primary_key.test
> b/mysql-test/suite/innodb/t/alter_primary_key.test
> --- a/mysql-test/suite/innodb/t/alter_primary_key.test
> +++ b/mysql-test/suite/innodb/t/alter_primary_key.test
> @@ -1,6 +1,9 @@
> --source innodb_default_row_format.inc
> --source include/have_debug.inc
> --source include/have_debug_sync.inc
> +--disable_query_log
> +--source include/test_db_charset_latin1.inc
> +--enable_query_log
you don't disable query log in other tests, why here?
>
> --echo #
> --echo # MDEV-23244 ALTER TABLE…ADD PRIMARY KEY fails to flag
> diff --git a/mysql-test/suite/perfschema/t/short_option_1-master.opt
> b/mysql-test/suite/perfschema/t/short_option_1-master.opt
> --- a/mysql-test/suite/perfschema/t/short_option_1-master.opt
> +++ b/mysql-test/suite/perfschema/t/short_option_1-master.opt
> @@ -1 +1 @@
> --a -Cutf8 -W1
> +-a -Cutf8 -W1 --collation-server=utf8_general_ci
was it necessary?
> diff --git a/mysql-test/suite/rpl/include/rpl_charset.inc
> b/mysql-test/suite/rpl/include/rpl_charset.inc
> --- a/mysql-test/suite/rpl/include/rpl_charset.inc
> +++ b/mysql-test/suite/rpl/include/rpl_charset.inc
> @@ -145,4 +145,11 @@ sync_slave_with_master;
> --echo #
>
>
> +connection master;
> +SET GLOBAL collation_server=utf8mb4_uca1400_ai_ci;
> +SET SESSION collation_server=utf8mb4_uca1400_ai_ci;
> +connection slave;
> +SET GLOBAL collation_server=utf8mb4_uca1400_ai_ci;
> +SET SESSION collation_server=utf8mb4_uca1400_ai_ci;
why?
> +
> --source include/rpl_end.inc
> diff --git a/mysql-test/suite/sys_vars/inc/secure_timestamp_func.inc
> b/mysql-test/suite/sys_vars/inc/secure_timestamp_func.inc
> --- a/mysql-test/suite/sys_vars/inc/secure_timestamp_func.inc
> +++ b/mysql-test/suite/sys_vars/inc/secure_timestamp_func.inc
> @@ -58,7 +58,7 @@ set time_zone='+00:00';
> set timestamp=1234567890.101112;
> select @@timestamp, now(6);
>
> -create table t1 (b varchar(20), a timestamp(6) default current_timestamp(6));
> +create table t1 (b varchar(20), a timestamp(6) default current_timestamp(6))
> charset=latin1;
why? charset shouldn't affect secure_timestamp functionality
(same in all other secure_timestamp tests)
> insert t1 (b) values ('replicated');
> sync_slave_with_master;
> create trigger t1rbr before insert on t1 for each row set new.a=now(6);
> diff --git a/storage/connect/mysql-test/connect/r/bson.result
> b/storage/connect/mysql-test/connect/r/bson.result
> --- a/storage/connect/mysql-test/connect/r/bson.result
> +++ b/storage/connect/mysql-test/connect/r/bson.result
> @@ -321,7 +321,7 @@ WHO CHAR(12),
> WEEK INT(2) JPATH='$.WEEK[2].NUMBER',
> WHAT CHAR(32) JPATH='$.WEEK[2].EXPENSE[*].WHAT',
> AMOUNT DOUBLE(8,2) JPATH='$.WEEK[2].EXPENSE[*].AMOUNT')
> -ENGINE=CONNECT TABLE_TYPE=BSON FILE_NAME='expense.json';
> +ENGINE=CONNECT CHARSET=latin1 TABLE_TYPE=BSON FILE_NAME='expense.json';
is it necessary? are there any connect/bson tests for utf8mb4?
> SELECT * FROM t4;
> WHO WEEK WHAT AMOUNT
> Joe 5 Beer 14.00
> diff --git a/storage/connect/mysql-test/connect/r/endian.result
> b/storage/connect/mysql-test/connect/r/endian.result
> --- a/storage/connect/mysql-test/connect/r/endian.result
> +++ b/storage/connect/mysql-test/connect/r/endian.result
> @@ -10,7 +10,7 @@ birth DATE NOT NULL FIELD_FORMAT='L',
> id CHAR(5) NOT NULL FIELD_FORMAT='L2',
> salary DOUBLE(9,2) NOT NULL DEFAULT 0.00 FIELD_FORMAT='LF',
> dept INT(4) NOT NULL FIELD_FORMAT='L2'
> -) ENGINE=CONNECT TABLE_TYPE=BIN BLOCK_SIZE=5 FILE_NAME='Testbal.dat';
> +) ENGINE=CONNECT CHARSET=latin1 TABLE_TYPE=BIN BLOCK_SIZE=5
> FILE_NAME='Testbal.dat';
or any connect utf8mb4 tests whatsoever?
> SELECT * FROM t1;
> fig name birth id salary dept
> 5500 ARCHIBALD 1980-01-25 3789 4380.50 318
> diff --git a/storage/rocksdb/mysql-test/rocksdb/r/checksum_table_live.result
> b/storage/rocksdb/mysql-test/rocksdb/r/checksum_table_live.result
> --- a/storage/rocksdb/mysql-test/rocksdb/r/checksum_table_live.result
> +++ b/storage/rocksdb/mysql-test/rocksdb/r/checksum_table_live.result
> @@ -1,7 +1,7 @@
> DROP TABLE IF EXISTS t1,t2;
> -CREATE TABLE t1 (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb CHECKSUM=1;
> +CREATE TABLE t1 (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb CHECKSUM=1
> CHARSET=latin1;
again. was it necessary? are there any rocksdb tests with utf8mb4?
> INSERT INTO t1 (a,b) VALUES (1,'a'),(2,'b');
> -CREATE TABLE t2 (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb CHECKSUM=1;
> +CREATE TABLE t2 (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb CHECKSUM=1
> CHARSET=latin1;
> CHECKSUM TABLE t1;
> Table Checksum
> test.t1 4259194219
Regards,
Sergei
Chief Architect, MariaDB Server
and [email protected]
_______________________________________________
developers mailing list -- [email protected]
To unsubscribe send an email to [email protected]