Details
-
Bug
-
Status: Closed (View Workflow)
-
Blocker
-
Resolution: Fixed
-
11.5(EOL), 11.6(EOL)
Description
A default server installation on UTF-8 system has these character-set-related settings (taken from 11.5.2 Fedora 38 RPM):
> show variables like 'character%'; |
+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ |
| Variable_name | Value |
|
+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ |
| character_set_client | utf8mb3 |
|
| 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 |
|
| character_set_connection | utf8mb3 |
|
| character_set_database | latin1 |
|
| character_set_filesystem | binary | |
| character_set_results | utf8mb3 |
|
| character_set_server | latin1 |
|
| character_set_system | utf8mb3 |
|
| character_sets_dir | /usr/share/mariadb/charsets/ |
|
+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ |
With this, even fairly basic operations appear to be impossible:
MariaDB [(none)]> select COLUMN_TYPE INTO @col_type from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = 'mysql' limit 1; |
Query OK, 1 row affected (0.003 sec)
|
|
MariaDB [(none)]> select @col_type != 'binary(128)'; |
ERROR 1267 (HY000): Illegal mix of collations (utf8mb3_general_ci,COERCIBLE) and (utf8mb3_uca1400_ai_ci,COERCIBLE) for operation '<>' |
The example above was taken from Spider initialization, which now produces the error upon startup.
In MTR, we don't see it, because it changes clients' default-character-set to latin1.
But by restoring utf8mb3 value, we get the same:
--exec $MYSQL --default-character-set=utf8mb3 -e "select COLUMN_TYPE INTO @col_type from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = 'mysql' limit 1; select @col_type != 'binary(128)'" |
--------------
|
select @col_type != 'binary(128)'
|
--------------
|
|
ERROR 1267 (HY000) at line 1: Illegal mix of collations (utf8mb3_general_ci,COERCIBLE) and (utf8mb3_uca1400_ai_ci,COERCIBLE) for operation '<>'
|
mysqltest: At line 1: exec of '/mnt8t/bld/11.5-asan/client//mariadb --defaults-file=/mnt8t/bld/11.5-asan/mysql-test/var/my.cnf --default-character-set=utf8mb3 -e "select COLUMN_TYPE INTO @col_type from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = 'mysql' limit 1; select @col_type != 'binary(128)'; show variables like 'character%'"' failed, error: 256, status: 1, errno: 11
|
I assume it is an effect of changing the default collation to UCA or surrounding changes, I didn't check which exact commit caused it.
Attachments
Issue Links
- is caused by
-
MDEV-25829 Change default Unicode collation to uca1400_ai_ci
-
- Closed
-
- relates to
-
MDEV-28221 User variables lose coercibility information, leading to unexpected collation errors
-
- Closed
-
This has literally killed our production servers and definitely needs to be fixed and published ASAP.
After hours of trying to figure out what happened we finally got here and fixed the problem by changing the charset in the connection string and executing set names on each new connection. Details bellow, for whoever stumbles here:
mysql:host=localhost;dbname=dbname;charset=utf8mb4
set names utf8mb4 collate utf8mb4_unicode_ci