summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/build/changelog/unreleased_13/5411.rst6
-rw-r--r--lib/sqlalchemy/dialects/mysql/base.py2
-rw-r--r--test/dialect/mysql/test_compiler.py28
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"))