diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2018-06-24 13:06:38 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2018-06-25 16:43:37 -0400 |
commit | c99345ee9994c3ea2a5e6536cc3365f18d017cc1 (patch) | |
tree | 43e68f5a4872398c6c1b0a7304c2413f942c56d5 /lib/sqlalchemy/dialects/mysql/mysqldb.py | |
parent | 7d2a581a58e9ca4ffbcb39a384ba6950a966de7a (diff) | |
download | sqlalchemy-c99345ee9994c3ea2a5e6536cc3365f18d017cc1.tar.gz |
Use utf8mb4 (or utf8mb3) for all things MySQL
Fixed bug in MySQLdb dialect and variants such as PyMySQL where an
additional "unicode returns" check upon connection makes explicit use of
the "utf8" character set, which in MySQL 8.0 emits a warning that utf8mb4
should be used. This is now replaced with a utf8mb4 equivalent.
Documentation is also updated for the MySQL dialect to specify utf8mb4 in
all examples. Additional changes have been made to the test suite to use
utf8mb3 charsets and databases (there seem to be collation issues in some
edge cases with utf8mb4), and to support configuration default changes made
in MySQL 8.0 such as explicit_defaults_for_timestamp as well as new errors
raised for invalid MyISAM indexes.
Change-Id: Ib596ea7de4f69f976872a33bffa4c902d17dea25
Fixes: #4283
Fixes: #4192
Diffstat (limited to 'lib/sqlalchemy/dialects/mysql/mysqldb.py')
-rw-r--r-- | lib/sqlalchemy/dialects/mysql/mysqldb.py | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/sqlalchemy/dialects/mysql/mysqldb.py b/lib/sqlalchemy/dialects/mysql/mysqldb.py index 3da64a491..535c8ec52 100644 --- a/lib/sqlalchemy/dialects/mysql/mysqldb.py +++ b/lib/sqlalchemy/dialects/mysql/mysqldb.py @@ -109,21 +109,21 @@ class MySQLDialect_mysqldb(MySQLDialect): def _check_unicode_returns(self, connection): # work around issue fixed in # https://github.com/farcepest/MySQLdb1/commit/cd44524fef63bd3fcb71947392326e9742d520e8 - # specific issue w/ the utf8_bin collation and unicode returns + # specific issue w/ the utf8mb4_bin collation and unicode returns - has_utf8_bin = self.server_version_info > (5, ) and \ + has_utf8mb4_bin = self.server_version_info > (5, ) and \ connection.scalar( - "show collation where %s = 'utf8' and %s = 'utf8_bin'" + "show collation where %s = 'utf8mb4' and %s = 'utf8mb4_bin'" % ( self.identifier_preparer.quote("Charset"), self.identifier_preparer.quote("Collation") )) - if has_utf8_bin: + if has_utf8mb4_bin: additional_tests = [ sql.collate(sql.cast( sql.literal_column( "'test collated returns'"), - TEXT(charset='utf8')), "utf8_bin") + TEXT(charset='utf8mb4')), "utf8mb4_bin") ] else: additional_tests = [] |