-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
COLLATION_CHARACTER_SET_APPLICABILITY.COLLATION_NAME vs MariaDB FULL_COLLATION_NAME #6361
Comments
Is this a bug report? If yes, please start with answering the usual questions:
|
This is a bug report related to the most recent versions of MariaDB What did you try to do?Running Doctrine/Orm migrations after upgrading to DBAL >= 3 and ORM >=2.20 What did you expect to happen?That -- after applying the suggested migrations -- the schema validation tools would no longer complain What happened instead?Endless loop, applying the suggested migrations did not help. One comment from my side: yes, you receive frequent bug reports, but please read and understand my explanations from the first post, IMHO they are clear and concise. Thank you. |
Another comment from my side: @derrabus 's questions are completely on point, it's not far fetched to ask you in what context you stumbled upon this, and it has nothing to do with the clarity or conciseness of your original message. I don't know why you assume your message hasn't been read. |
From MariaDB-10.10.1, where uca1400 was added, the information_schema.COLLATION_CHARACTER_SET_APPLICABILITY was extended to have FULL_COLLATION_NAME which corresponds to the information_schema.TABLES.TABLE_COLLATION value. Executable comment syntax is used to limited to the applicable versions. To preserve compatibility with older MariaDB versions, and MySQL versions where the previous COLLATION_NAME was the match is left as a JOIN critieria. In new MariaDB versions this won't result in an extra row match. Closes: doctrine#6361
From MariaDB-10.10.1, where uca1400 was added, the information_schema.COLLATION_CHARACTER_SET_APPLICABILITY was extended to have FULL_COLLATION_NAME which corresponds to the information_schema.TABLES.TABLE_COLLATION value. Executable comment syntax is used to limited to the applicable versions. To preserve compatibility with older MariaDB versions, and MySQL versions where the previous COLLATION_NAME was the match is left as a JOIN critieria. In new MariaDB versions this won't result in an extra row match. Closes: doctrine#6361
From MariaDB-10.10.1, where uca1400 was added, the information_schema.COLLATION_CHARACTER_SET_APPLICABILITY was extended to have FULL_COLLATION_NAME which corresponds to the information_schema.TABLES.TABLE_COLLATION value. Executable comment syntax is used to limited to the applicable versions. To preserve compatibility with older MariaDB versions, and MySQL versions where the previous COLLATION_NAME was the match is left as a JOIN critieria. In new MariaDB versions this won't result in an extra row match. Closes: doctrine#6361
<!-- Fill in the relevant information below to help triage your pull request. --> | Q | A |------------- | ----------- | Type | bug | Fixed issues | #6361 #### Summary From MariaDB-10.10.1, where uca1400 was added, the information_schema.COLLATION_CHARACTER_SET_APPLICABILITY was extended to have FULL_COLLATION_NAME which corresponds to the information_schema.TABLES.TABLE_COLLATION value. Executable comment syntax is used to limited to the applicable versions. To preserve compatibility with older MariaDB versions, and MySQL versions where the previous COLLATION_NAME was the match is left as a JOIN criteria. In new MariaDB versions this won't result in an extra row match. Closes: #6361 The lack of this fix did case the CI test to fail with a MariaDB-11.0+ container: ``` 1) Doctrine\DBAL\Tests\Functional\Schema\MySQLSchemaManagerTest::testEnsureTableWithoutOptionsAreReflectedInMetadata Undefined array key "engine" /home/runner/work/dbal/dbal/src/Schema/Table.php:927 /home/runner/work/dbal/dbal/tests/Functional/Schema/MySQLSchemaManagerTest.php:550 ``` With this fix all version of MySQL and MariaDB (even those new ones soon to be in a different PR) will pass like: https://github.com/grooverdan/dbal/actions/runs/9412110648/job/25926481038
…ySQL/MariaDB platforms The diverging MariaDB-10.10.1+ implementation of retrieving table options split the implementation so that its now in the AbstractMySQLPlatform and the MariaDB specific implementation in MariaDBPlatform. Fixes doctrine#6361.
The diverging MariaDB-10.10.1+ implementation of retrieving table options split the implementation so that its now in the AbstractMySQLPlatform and the MariaDB specific implementation in MariaDBPlatform. Fixes doctrine#6361.
The diverging MariaDB-10.10.1+ implementation of retrieving table options split the implementation so that its now in the AbstractMySQLPlatform and the MariaDB specific implementation in MariaDBPlatform. Fixes doctrine#6361.
The diverging MariaDB-10.10.1+ implementation of retrieving table options split the implementation so that its now in the AbstractMySQLPlatform and the MariaDB specific implementation in MariaDBPlatform. Fixes doctrine#6361.
In recent MariaDB version the following will not succeed (resp. always yields an empty result set):
dbal/src/Schema/MySQLSchemaManager.php
Lines 463 to 474 in 7fb00fd
The reason is, that
CCSA.collation_name
in recent MariaDB versions (tested version: 10.11.7) only contains the short collation name without prepended character set, whileTABLES.table_collation
contains the long table name. For example, in the case of the newly introducedutf8mb4_uca1400_ai_ci
the corresponding row fromCOLLATION_CHARACTER_SET_APPLICABILITY
is (CSV export):while the
TABLES.TABLE_COLLATION
holds the full collation nameutf8mb4_uca1400_ai_ci
.It also seems that this is a recent change in MariaDB; one Ubuntu "Jammy" system I am using runs MariaDB 10.6.16 which only has the
COLLATION_NAME
andCHARACTER_SET_NAME
in that table, and the collation name is the full name with the character set prepended.The text was updated successfully, but these errors were encountered: