@@ -420,6 +420,44 @@ def test_minimal_image_update_row_event(self):
420420 self .assertEqual (event .rows [0 ]["after_values" ]["id" ], None )
421421 self .assertEqual (event .rows [0 ]["after_values" ]["data" ], "World" )
422422
423+ def test_default_charset_parsing (self ):
424+ """
425+ Here, we want the database to include the binary charset into
426+ the DEFAULT_CHARSET optional metadata block.
427+ Also, we are adding an int field and two text fields to force
428+ a difference in the index of the blob column in the table
429+ and in the list of columns that have charset.
430+ """
431+ query = """CREATE TABLE test (
432+ id INT NOT NULL AUTO_INCREMENT,
433+ text1 VARCHAR(255) NOT NULL,
434+ text2 VARCHAR(255) NOT NULL,
435+ data LONGBLOB NOT NULL,
436+ PRIMARY KEY (id)
437+ ) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;"""
438+ self .execute (query )
439+ query = "INSERT INTO test (text1, text2, data) VALUES(%s, %s, %s)"
440+ self .execute_with_args (query , ("text" , "text" , b"data" ))
441+ self .execute ("COMMIT" )
442+
443+ self .assertIsInstance (self .stream .fetchone (), RotateEvent )
444+ self .assertIsInstance (self .stream .fetchone (), FormatDescriptionEvent )
445+ # QueryEvent for the Create Table
446+ self .assertIsInstance (self .stream .fetchone (), QueryEvent )
447+ # QueryEvent for the BEGIN
448+ self .assertIsInstance (self .stream .fetchone (), QueryEvent )
449+
450+ event = self .stream .fetchone ()
451+ self .assertIsInstance (event , TableMapEvent )
452+ if event .table_map [event .table_id ].column_name_flag :
453+ columns = {c .name : c for c in event .columns }
454+ assert columns ["text1" ].character_set_name == "utf8"
455+ assert columns ["text1" ].collation_name .startswith ("utf8" )
456+ assert columns ["text2" ].character_set_name == "utf8"
457+ assert columns ["text2" ].collation_name .startswith ("utf8" )
458+ assert columns ["data" ].character_set_name == "binary"
459+ assert columns ["data" ].collation_name == "binary"
460+
423461 def test_log_pos (self ):
424462 query = "CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
425463 self .execute (query )
@@ -1909,7 +1947,7 @@ def setUp(self):
19091947 def test_json_partial_update (self ):
19101948 create_query = "CREATE TABLE test_json_v2 (id INT, c JSON,PRIMARY KEY (id)) ;"
19111949 column_add_query = "ALTER TABLE test_json_v2 ADD COLUMN d JSON DEFAULT NULL, ADD COLUMN e JSON DEFAULT NULL;"
1912- insert_query = """INSERT INTO test_json_v2 VALUES
1950+ insert_query = """INSERT INTO test_json_v2 VALUES
19131951 (101
19141952 ,'{"a":"aaaaaaaaaaaaa", "c":"ccccccccccccccc", "ab":["abababababababa", "babababababab"]}'
19151953 ,'{"a":"aaaaaaaaaaaaa", "c":"ccccccccccccccc", "ab":["abababababababa", "babababababab"]}'
@@ -1946,7 +1984,7 @@ def test_json_partial_update_column_value_none(self):
19461984 drop_table_if_exists_query = "DROP TABLE IF EXISTS test_json_v2;"
19471985 create_query = "CREATE TABLE test_json_v2 (id INT, c JSON,PRIMARY KEY (id)) ;"
19481986 column_add_query = "ALTER TABLE test_json_v2 ADD COLUMN d JSON DEFAULT NULL, ADD COLUMN e JSON DEFAULT NULL;"
1949- insert_query = """INSERT INTO test_json_v2 VALUES
1987+ insert_query = """INSERT INTO test_json_v2 VALUES
19501988 (101
19511989 ,'{"a":"aaaaaaaaaaaaa", "c":"ccccccccccccccc", "ab":["abababababababa", "babababababab"]}'
19521990 ,'{"a":"aaaaaaaaaaaaa", "c":"ccccccccccccccc", "ab":["abababababababa", "babababababab"]}'
@@ -1984,7 +2022,7 @@ def test_json_partial_update_json_remove(self):
19842022 drop_table_if_exists_query = "DROP TABLE IF EXISTS test_json_v2;"
19852023 create_query = "CREATE TABLE test_json_v2 (id INT, c JSON,PRIMARY KEY (id)) ;"
19862024 column_add_query = "ALTER TABLE test_json_v2 ADD COLUMN d JSON DEFAULT NULL, ADD COLUMN e JSON DEFAULT NULL;"
1987- insert_query = """INSERT INTO test_json_v2 VALUES
2025+ insert_query = """INSERT INTO test_json_v2 VALUES
19882026 (101
19892027 ,'{"a":"aaaaaaaaaaaaa", "c":"ccccccccccccccc", "ab":["abababababababa", "babababababab"]}'
19902028 ,'{"a":"aaaaaaaaaaaaa", "c":"ccccccccccccccc", "ab":["abababababababa", "babababababab"]}'
@@ -2024,7 +2062,7 @@ def test_json_partial_update_two_column(self):
20242062 drop_table_if_exists_query = "DROP TABLE IF EXISTS test_json_v2;"
20252063 create_query = "CREATE TABLE test_json_v2 (id INT, c JSON,PRIMARY KEY (id)) ;"
20262064 column_add_query = "ALTER TABLE test_json_v2 ADD COLUMN d JSON DEFAULT NULL, ADD COLUMN e JSON DEFAULT NULL;"
2027- insert_query = """INSERT INTO test_json_v2 VALUES
2065+ insert_query = """INSERT INTO test_json_v2 VALUES
20282066 (101
20292067 ,'{"a":"aaaaaaaaaaaaa", "c":"ccccccccccccccc", "ab":["abababababababa", "babababababab"]}'
20302068 ,'{"a":"aaaaaaaaaaaaa", "c":"ccccccccccccccc", "ab":["abababababababa", "babababababab"]}'
0 commit comments