diff options
| -rw-r--r-- | doc/build/changelog/unreleased_13/5411.rst | 6 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/mysql/base.py | 2 | ||||
| -rw-r--r-- | test/dialect/mysql/test_compiler.py | 28 |
3 files changed, 36 insertions, 0 deletions
diff --git a/doc/build/changelog/unreleased_13/5411.rst b/doc/build/changelog/unreleased_13/5411.rst new file mode 100644 index 000000000..8389278e2 --- /dev/null +++ b/doc/build/changelog/unreleased_13/5411.rst @@ -0,0 +1,6 @@ +.. change:: + :tags: bug, mysql + :tickets: 5411 + + Fixed an issue where CREATE TABLE statements were not specifying the + COLLATE keyword correctly.
\ No newline at end of file diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index 90945ebad..eea86bf75 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -1796,6 +1796,8 @@ class MySQLDDLCompiler(compiler.DDLCompiler): [ ("DEFAULT_CHARSET", "COLLATE"), ("DEFAULT_CHARACTER_SET", "COLLATE"), + ("CHARSET", "COLLATE"), + ("CHARACTER_SET", "COLLATE"), ], nonpart_options, ): diff --git a/test/dialect/mysql/test_compiler.py b/test/dialect/mysql/test_compiler.py index 89af0ed4e..09bdd80be 100644 --- a/test/dialect/mysql/test_compiler.py +++ b/test/dialect/mysql/test_compiler.py @@ -871,6 +871,34 @@ class SQLTest(fixtures.TestBase, AssertsCompiledSQL): ")STATS_SAMPLE_PAGES=2 PARTITION BY HASH(other_id) PARTITIONS 2", ) + def test_create_table_with_collate(self): + # issue #5411 + t1 = Table( + "testtable", + MetaData(), + Column("id", Integer(), primary_key=True, autoincrement=True), + mysql_engine="InnoDB", + mysql_collate="utf8_icelandic_ci", + mysql_charset="utf8", + ) + first_part = ( + "CREATE TABLE testtable (" + "id INTEGER NOT NULL AUTO_INCREMENT, " + "PRIMARY KEY (id))" + ) + try: + self.assert_compile( + schema.CreateTable(t1), + first_part + + "ENGINE=InnoDB CHARSET=utf8 COLLATE utf8_icelandic_ci", + ) + except AssertionError: + self.assert_compile( + schema.CreateTable(t1), + first_part + + "CHARSET=utf8 ENGINE=InnoDB COLLATE utf8_icelandic_ci", + ) + def test_inner_join(self): t1 = table("t1", column("x")) t2 = table("t2", column("y")) |
