Skip to content

Comments

Add test case to show collation issue in MysqlAdapter::createTable()#1020

Open
ishanvyas22 wants to merge 1 commit intocakephp:4.xfrom
ishanvyas22:feature/PB-49136_Collation-issue
Open

Add test case to show collation issue in MysqlAdapter::createTable()#1020
ishanvyas22 wants to merge 1 commit intocakephp:4.xfrom
ishanvyas22:feature/PB-49136_Collation-issue

Conversation

@ishanvyas22
Copy link

When collation is set on field the createTable() generates wrong sql which leads to wrong collation on the field when table is created. This issue is seems to be present from v4.6 where $this->getColumnSqlDefinition() changed to $dialect->columnDefinitionSql() in MysqlAdapter file (#839). The weird part is there's no direct test case which tests the createMethod(), may be there's a reason for that but then this scenario should've covered.

This PR adds a test case to only demonstrate the issue present. I have not applied any fix since I'm not sure which place would be the right place to fix it.

When collation is set on field the createTable() generates wrong sql which leads to wrong collation on the field when table is created.
@dereuromark dereuromark added this to the 4.x (CakePHP 5) milestone Feb 20, 2026
dereuromark added a commit that referenced this pull request Feb 20, 2026
The MysqlSchemaDialect in cakephp/database only adds COLLATE for
text, char, and string types. Since uuid columns generate CHAR(36)
but use the 'uuid' type identifier, collation was being ignored.

This fix converts uuid to char(36) in mapColumnData() so the dialect
properly handles the collation.

Fixes the issue reported in #1020.
dereuromark added a commit to cakephp/cakephp that referenced this pull request Feb 20, 2026
The uuid type generates CHAR(36) SQL but was not included in the
$hasCollate array, causing column collation to be silently ignored.

This fix adds TYPE_UUID to the $hasCollate array in MysqlSchemaDialect
so that collation is properly applied to uuid columns.

Refs cakephp/migrations#1020
dereuromark added a commit to cakephp/cakephp that referenced this pull request Feb 20, 2026
The uuid type generates CHAR(36) SQL but was not included in the
$hasCollate array, causing column collation to be silently ignored.

This fix:
1. Adds TYPE_UUID to the $hasCollate array in MysqlSchemaDialect
2. Adds 'uuid' to $_columnExtras in TableSchema to allow 'collate'
   attribute to be preserved when adding columns

Refs cakephp/migrations#1020
@dereuromark
Copy link
Member

dereuromark commented Feb 20, 2026

Added some PRs that fix the issue.

Migrations v4 could have the workaround to also work with older cake v5.
Migrations v5 requires latest cake v5.3+ anyway, so here we can also ship the proper fix via core maybe only?

markstory pushed a commit to cakephp/cakephp that referenced this pull request Feb 20, 2026
The uuid type generates CHAR(36) SQL but was not included in the
$hasCollate array, causing column collation to be silently ignored.

This fix adds TYPE_UUID to the $hasCollate array in MysqlSchemaDialect
so that collation is properly applied to uuid columns.

Refs cakephp/migrations#1020

* Add collation support for uuid columns in MySQL

The uuid type generates CHAR(36) SQL but was not included in the
$hasCollate array, causing column collation to be silently ignored.

This fix:
1. Adds TYPE_UUID to the $hasCollate array in MysqlSchemaDialect
2. Adds 'uuid' to $_columnExtras in TableSchema to allow 'collate'
   attribute to be preserved when adding columns

Refs cakephp/migrations#1020
@markstory
Copy link
Member

Fixing the abstract schema type in cakephp feels like the right solution for this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants