Skip to content

Commit 9f12cb6

Browse files
committed
BUG#36570707: Collation set on connect using C-Extension is ignored
This patch fixes the issue where the collation passed through the connection option was getting ignored and default collation was being set by C API. Change-Id: Idacbd07fadfdc7a754140b7104db6172f1bc2f52
1 parent 4ba112a commit 9f12cb6

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

CHANGES.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ v9.0.0
1515
- WL#16318: Deprecate Cursors Prepared Raw and Named Tuple
1616
- WL#16283: Remove OpenTelemetry Bundled Installation
1717
- BUG#36611371: Update dnspython required versions to allow latest 2.6.1
18+
- BUG#36570707: Collation set on connect using C-Extension is ignored
1819
- BUG#36476195: Incorrect escaping in pure Python mode if sql_mode includes NO_BACKSLASH_ESCAPES
1920
- BUG#36289767: MySQLCursorBufferedRaw does not skip conversion
2021

mysql-connector-python/lib/mysql/connector/abstracts.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,13 +1269,6 @@ def set_charset_collation(
12691269

12701270
self._execute_query(f"SET NAMES '{charset_name}' COLLATE '{collation_name}'")
12711271

1272-
try:
1273-
# Required for C Extension
1274-
self.set_character_set_name(charset_name)
1275-
except AttributeError:
1276-
# Not required for pure Python connection
1277-
pass
1278-
12791272
if self.converter:
12801273
self.converter.set_charset(charset_name, character_set=self._character_set)
12811274

mysql-connector-python/tests/cext/test_cext_connection.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,11 +197,9 @@ def test_connection_id(self):
197197
def test_cursor(self):
198198
"""Test CEXT cursors."""
199199

200-
class FalseCursor:
201-
...
200+
class FalseCursor: ...
202201

203-
class TrueCursor(cursor_cext.CMySQLCursor):
204-
...
202+
class TrueCursor(cursor_cext.CMySQLCursor): ...
205203

206204
self.assertRaises(
207205
errors.ProgrammingError, self.cnx.cursor, cursor_class=FalseCursor
@@ -285,6 +283,9 @@ def test_character_set(self):
285283
self.assertTupleEqual(("ascii", "ascii_general_ci"), res)
286284

287285
for charset_id, charset, collation in [
286+
(303, "utf8mb4", "utf8mb4_ja_0900_as_cs"),
287+
(46, "utf8mb4", "utf8mb4_bin"),
288+
(45, "utf8mb4", "utf8mb4_general_ci"),
288289
(26, "cp1250", "cp1250_general_ci"),
289290
(8, "latin1", "latin1_swedish_ci"),
290291
]:
@@ -296,6 +297,11 @@ def test_character_set(self):
296297
cur.execute("SELECT @@character_set_client, @@collation_connection")
297298
res = cur.fetchone()
298299
self.assertTupleEqual((config["charset"], config["collation"]), res)
300+
cnx.cmd_change_user(config["user"], config["password"], config["database"], charset=charset_id)
301+
with cnx.cursor() as cur:
302+
cur.execute("SELECT @@character_set_client, @@collation_connection")
303+
res = cur.fetchone()
304+
self.assertTupleEqual((config["charset"], config["collation"]), res)
299305

300306
config["client_flags"] = (
301307
ClientFlag.get_default() | ClientFlag.CAN_HANDLE_EXPIRED_PASSWORDS

0 commit comments

Comments
 (0)