--- /dev/null
+.. change::
+ :tags: bug, mysql, mariadb
+ :tickets: 7115, 7136
+ :versions: 1.4.26
+
+ Fixes to accommodate for the MariaDB 10.6 series, including backwards
+ incompatible changes in both the mariadb-connector Python driver (supported
+ on SQLAlchemy 1.4 only) as well as the native 10.6 client libraries that
+ are used automatically by the mysqlclient DBAPI (applies to both 1.3 and
+ 1.4). The "utf8mb3" encoding symbol is now reported by these client
+ libraries when the encoding is stated as "utf8", leading to lookup and
+ encoding errors within the MySQL dialect that does not expect this symbol.
+ Updates to both the MySQL base library to accommodate for this utf8mb3
+ symbol being reported as well as to the test suite. Thanks to Georg Richter
+ for support.
+
from sqlalchemy.testing import eq_
from sqlalchemy.testing import expect_warnings
from sqlalchemy.testing import fixtures
+from sqlalchemy.testing import in_
from sqlalchemy.testing import is_
from sqlalchemy.testing import mock
from ...engine import test_deprecations
class DialectTest(fixtures.TestBase):
+ __backend__ = True
+
@testing.combinations(
(None, "cONnection was kILLEd", "InternalError", "pymysql", True),
(None, "cONnection aLREady closed", "InternalError", "pymysql", True),
"mariadb+pymysql",
]
)
- def test_special_encodings(self):
+ @testing.combinations(
+ ("utf8mb4",),
+ ("utf8",),
+ )
+ def test_special_encodings(self, enc):
- for enc in ["utf8mb4", "utf8"]:
- eng = engines.testing_engine(
- options={"connect_args": {"charset": enc, "use_unicode": 0}}
- )
- conn = eng.connect()
- eq_(conn.dialect._connection_charset, enc)
+ eng = engines.testing_engine(
+ options={"connect_args": {"charset": enc, "use_unicode": 0}}
+ )
+ conn = eng.connect()
+
+ detected = conn.dialect._connection_charset
+ if enc == "utf8mb4":
+ eq_(detected, enc)
+ else:
+ in_(detected, ["utf8", "utf8mb3"])
+
+ @testing.only_on("mariadb+mariadbconnector")
+ def test_mariadb_connector_special_encodings(self):
+
+ eng = engines.testing_engine()
+ conn = eng.connect()
+
+ detected = conn.dialect._connection_charset
+ eq_(detected, "utf8mb4")
class ParseVersionTest(fixtures.TestBase):