From: Gord Thompson Date: Thu, 6 Aug 2020 23:19:52 +0000 (-0600) Subject: Fix mysql CREATE TABLE / COLLATE issue X-Git-Tag: rel_1_4_0b1~183^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=32e0b128f6c077017673f7049e2b667bf96f53e3;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Fix mysql CREATE TABLE / COLLATE issue Fixes: #5411 Change-Id: Ib0c53f5ed3f9d3ff0586580c9a9cce73b4b870f4 --- diff --git a/doc/build/changelog/unreleased_13/5411.rst b/doc/build/changelog/unreleased_13/5411.rst new file mode 100644 index 0000000000..8389278e27 --- /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 90945ebadd..eea86bf758 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 89af0ed4ec..09bdd80be2 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"))