Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-37544

Defined by default collation is not respected when a charset is supplied

    XMLWordPrintable

Details

    • Bug
    • Status: Open (View Workflow)
    • Major
    • Resolution: Unresolved
    • 11.8.3
    • None
    • Server
    • None
    • Ubuntu 24.04

    Description

      Issue description

      For backwards compatibility, default collation set is defined as collation-server = utf8mb3_general_ci in my.cnf file.

      However, this value is being ignored as default one, and utf8mb3_uca1400_ai_ci is being set to all new databases and tables.

      This causes issues, like "Illegal mix of collations (utf8mb3_general_ci,IMPLICIT) and (utf8mb3_uca1400_ai_ci,IMPLICIT) for operation '='" when attempt to apply migrations or do some altering on previously created tables.

      The issue happens only when table has a default charset supplied, ie CREATE TABLE `x` (...) DEFAULT CHARSET=utf8mb3;.
      In case CHARSET is not provided - it respects defined collation.

      How to reproduce

      1. Add collation-server = utf8mb3_general_ci to my.cnf and restart server. Ensure collate is set:

        MariaDB [(none)]> SHOW VARIABLES LIKE 'collation_server';
        +------------------+--------------------+
        | Variable_name    | Value              |
        +------------------+--------------------+
        | collation_server | utf8mb3_general_ci |
        +------------------+--------------------+
        1 row in set (0.001 sec)
         
        MariaDB [(none)]>
        

      2. Create new test database and ensure it's collation:

        MariaDB [(none)]> create database test_db;
        Query OK, 1 row affected (0.014 sec)
         
        MariaDB [(none)]> SELECT default_character_set_name, default_collation_name
            -> FROM information_schema.schemata
            -> WHERE schema_name = 'test_db';
        +----------------------------+------------------------+
        | default_character_set_name | default_collation_name |
        +----------------------------+------------------------+
        | utf8mb3                    | utf8mb3_general_ci     |
        +----------------------------+------------------------+
        1 row in set (0.001 sec)
        

      3. Create test table and check it's collation

        MariaDB [(none)]> use test_db;
        Database changed
        MariaDB [test_db]> CREATE TABLE `x509keypair` (
            ->   `id` int(11) NOT NULL AUTO_INCREMENT,
            ->   `created_at` datetime DEFAULT NULL,
            ->   `updated_at` datetime DEFAULT NULL,
            ->   `uuid` varchar(36) DEFAULT NULL,
            ->   `certificate` text DEFAULT NULL,
            ->   `private_key` text DEFAULT NULL,
            ->   `project_id` varchar(255) DEFAULT NULL,
            ->   `user_id` varchar(255) DEFAULT NULL,
            ->   `intermediates` text DEFAULT NULL,
            ->   `private_key_passphrase` text DEFAULT NULL,
            ->   PRIMARY KEY (`id`),
            ->   UNIQUE KEY `uniq_x509keypair0uuid` (`uuid`)
            -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
        Query OK, 0 rows affected (0.025 sec)
         
        MariaDB [test_db]>
        MariaDB [test_db]> SELECT table_name, column_name, collation_name FROM information_schema.columns WHERE table_schema = 'test_db';
        +-------------+------------------------+-----------------------+
        | table_name  | column_name            | collation_name        |
        +-------------+------------------------+-----------------------+
        | x509keypair | id                     | NULL                  |
        | x509keypair | created_at             | NULL                  |
        | x509keypair | updated_at             | NULL                  |
        | x509keypair | uuid                   | utf8mb3_uca1400_ai_ci |
        | x509keypair | certificate            | utf8mb3_uca1400_ai_ci |
        | x509keypair | private_key            | utf8mb3_uca1400_ai_ci |
        | x509keypair | project_id             | utf8mb3_uca1400_ai_ci |
        | x509keypair | user_id                | utf8mb3_uca1400_ai_ci |
        | x509keypair | intermediates          | utf8mb3_uca1400_ai_ci |
        | x509keypair | private_key_passphrase | utf8mb3_uca1400_ai_ci |
        +-------------+------------------------+-----------------------+
        10 rows in set (0.008 sec)
         
        MariaDB [test_db]> 
        

      Attachments

        Activity

          People

            Unassigned Unassigned
            noonedeadpunk Dmitriy Rabotyagov
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.