Skip to content

Commit c9f0624

Browse files
committed
Support character sets added in MySQL 8.0.30.
1 parent 855149d commit c9f0624

File tree

4 files changed

+101
-73
lines changed

4 files changed

+101
-73
lines changed

src/MySqlConnector/Core/ServerSession.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ public async Task DisposeAsync(IOBehavior ioBehavior, CancellationToken cancella
471471
SupportsQueryAttributes = (initialHandshake.ProtocolCapabilities & ProtocolCapabilities.QueryAttributes) != 0;
472472
m_supportsSessionTrack = (initialHandshake.ProtocolCapabilities & ProtocolCapabilities.SessionTrack) != 0;
473473
var serverSupportsSsl = (initialHandshake.ProtocolCapabilities & ProtocolCapabilities.Ssl) != 0;
474-
m_characterSet = ServerVersion.Version >= ServerVersions.SupportsUtf8Mb4 ? CharacterSet.Utf8Mb4GeneralCaseInsensitive : CharacterSet.Utf8GeneralCaseInsensitive;
474+
m_characterSet = ServerVersion.Version >= ServerVersions.SupportsUtf8Mb4 ? CharacterSet.Utf8Mb4GeneralCaseInsensitive : CharacterSet.Utf8Mb3GeneralCaseInsensitive;
475475
m_setNamesPayload = ServerVersion.Version >= ServerVersions.SupportsUtf8Mb4 ?
476476
(SupportsQueryAttributes ? s_setNamesUtf8mb4WithAttributesPayload : s_setNamesUtf8mb4NoAttributesPayload) :
477477
(SupportsQueryAttributes ? s_setNamesUtf8WithAttributesPayload : s_setNamesUtf8NoAttributesPayload);

src/MySqlConnector/Protocol/CharacterSet.cs

Lines changed: 50 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ namespace MySqlConnector.Protocol;
33
/// <summary>
44
/// MySQL character set codes.
55
/// </summary>
6-
/// <remarks>Obtained from <c>SELECT id, collation_name FROM information_schema.collations ORDER BY id;</c> on MySQL 8.0.16.</remarks>
6+
/// <remarks>Obtained from <c>SELECT id, collation_name FROM information_schema.collations ORDER BY id;</c> on MySQL 8.0.30.</remarks>
77
internal enum CharacterSet : ushort
88
{
99
None = 0,
@@ -38,7 +38,7 @@ internal enum CharacterSet : ushort
3838
Latin5TurkishCaseInsensitive = 30,
3939
Latin1German2CaseInsensitive = 31,
4040
Armscii8GeneralCaseInsensitive = 32,
41-
Utf8GeneralCaseInsensitive = 33,
41+
Utf8Mb3GeneralCaseInsensitive = 33,
4242
Cp1250CzechCaseSensitive = 34,
4343
Ucs2GeneralCaseInsensitive = 35,
4444
Cp866GeneralCaseInsensitive = 36,
@@ -81,14 +81,14 @@ internal enum CharacterSet : ushort
8181
Keybcs2Binary = 73,
8282
Koi8rBinary = 74,
8383
Koi8uBinary = 75,
84-
Utf8ToLowerCaseInsensitive = 76,
84+
Utf8Mb3ToLowerCaseInsensitive = 76,
8585
Latin2Binary = 77,
8686
Latin5Binary = 78,
8787
Latin7Binary = 79,
8888
Cp850Binary = 80,
8989
Cp852Binary = 81,
9090
Swe7Binary = 82,
91-
Utf8Binary = 83,
91+
Utf8Mb3Binary = 83,
9292
Big5Binary = 84,
9393
EuckrBinary = 85,
9494
Gb2312Binary = 86,
@@ -178,31 +178,31 @@ internal enum CharacterSet : ushort
178178
Utf32CroatianCaseInsensitive = 181,
179179
Utf32Unicode520CaseInsensitive = 182,
180180
Utf32VietnameseCaseInsensitive = 183,
181-
Utf8UnicodeCaseInsensitive = 192,
182-
Utf8IcelandicCaseInsensitive = 193,
183-
Utf8LatvianCaseInsensitive = 194,
184-
Utf8RomanianCaseInsensitive = 195,
185-
Utf8SlovenianCaseInsensitive = 196,
186-
Utf8PolishCaseInsensitive = 197,
187-
Utf8EstonianCaseInsensitive = 198,
188-
Utf8SpanishCaseInsensitive = 199,
189-
Utf8SwedishCaseInsensitive = 200,
190-
Utf8TurkishCaseInsensitive = 201,
191-
Utf8CzechCaseInsensitive = 202,
192-
Utf8DanishCaseInsensitive = 203,
193-
Utf8LithuanianCaseInsensitive = 204,
194-
Utf8SlovakCaseInsensitive = 205,
195-
Utf8Spanish2CaseInsensitive = 206,
196-
Utf8RomanCaseInsensitive = 207,
197-
Utf8PersianCaseInsensitive = 208,
198-
Utf8EsperantoCaseInsensitive = 209,
199-
Utf8HungarianCaseInsensitive = 210,
200-
Utf8SinhalaCaseInsensitive = 211,
201-
Utf8German2CaseInsensitive = 212,
202-
Utf8CroatianCaseInsensitive = 213,
203-
Utf8Unicode520CaseInsensitive = 214,
204-
Utf8VietnameseCaseInsensitive = 215,
205-
Utf8GeneralMySql500CaseInsensitive = 223,
181+
Utf8Mb3UnicodeCaseInsensitive = 192,
182+
Utf8Mb3IcelandicCaseInsensitive = 193,
183+
Utf8Mb3LatvianCaseInsensitive = 194,
184+
Utf8Mb3RomanianCaseInsensitive = 195,
185+
Utf8Mb3SlovenianCaseInsensitive = 196,
186+
Utf8Mb3PolishCaseInsensitive = 197,
187+
Utf8Mb3EstonianCaseInsensitive = 198,
188+
Utf8Mb3SpanishCaseInsensitive = 199,
189+
Utf8Mb3SwedishCaseInsensitive = 200,
190+
Utf8Mb3TurkishCaseInsensitive = 201,
191+
Utf8Mb3CzechCaseInsensitive = 202,
192+
Utf8Mb3DanishCaseInsensitive = 203,
193+
Utf8Mb3LithuanianCaseInsensitive = 204,
194+
Utf8Mb3SlovakCaseInsensitive = 205,
195+
Utf8Mb3Spanish2CaseInsensitive = 206,
196+
Utf8Mb3RomanCaseInsensitive = 207,
197+
Utf8Mb3PersianCaseInsensitive = 208,
198+
Utf8Mb3EsperantoCaseInsensitive = 209,
199+
Utf8Mb3HungarianCaseInsensitive = 210,
200+
Utf8Mb3SinhalaCaseInsensitive = 211,
201+
Utf8Mb3German2CaseInsensitive = 212,
202+
Utf8Mb3CroatianCaseInsensitive = 213,
203+
Utf8Mb3Unicode520CaseInsensitive = 214,
204+
Utf8Mb3VietnameseCaseInsensitive = 215,
205+
Utf8Mb3GeneralMySql500CaseInsensitive = 223,
206206
Utf8Mb4UnicodeCaseInsensitive = 224,
207207
Utf8Mb4IcelandicCaseInsensitive = 225,
208208
Utf8Mb4LatvianCaseInsensitive = 226,
@@ -279,9 +279,23 @@ internal enum CharacterSet : ushort
279279
Utf8Mb4RussianUca900AccentSensitiveCaseSensitive = 307,
280280
Utf8Mb4ChineseUca900AccentSensitiveCaseSensitive = 308,
281281
Utf8Mb4Uca900Binary = 309,
282-
Utf8CroatianCaseInsensitiveMariaDb = 576,
283-
Utf8MyanmarCaseInsensitive = 577,
284-
Utf8ThaiUnicode520Weight2 = 578,
282+
Utf8Mb4NorwegianBokmal0900AccentInsensitiveCaseInsensitive = 310,
283+
Utf8Mb4NorwegianBokmal0900AccentSensitiveCaseSensitive = 311,
284+
Utf8Mb4NorwegianNynorsk0900AccentInsensitiveCaseInsensitive = 312,
285+
Utf8Mb4NorwegianNynorsk0900AccentSensitiveCaseSensitive = 313,
286+
Utf8Mb4SerbianLatin0900AccentInsensitiveCaseInsensitive = 314,
287+
Utf8Mb4SerbianLatin0900AccentSensitiveCaseSensitive = 315,
288+
Utf8Mb4Bosnian0900AccentInsensitiveCaseInsensitive = 316,
289+
Utf8Mb4Bosnian0900AccentSensitiveCaseSensitive = 317,
290+
Utf8Mb4Bulgarian0900AccentInsensitiveCaseInsensitive = 318,
291+
Utf8Mb4Bulgarian0900AccentSensitiveCaseSensitive = 319,
292+
Utf8Mb4Galician0900AccentInsensitiveCaseInsensitive = 320,
293+
Utf8Mb4Galician0900AccentSensitiveCaseSensitive = 321,
294+
Utf8Mb4MongolianCyrillic0900AccentInsensitiveCaseInsensitive = 322,
295+
Utf8Mb4MongolianCyrillic0900AccentSensitiveCaseSensitive = 323,
296+
Utf8Mb3CroatianCaseInsensitiveMariaDb = 576,
297+
Utf8Mb3MyanmarCaseInsensitive = 577,
298+
Utf8Mb3ThaiUnicode520Weight2 = 578,
285299
Utf8Mb4CroatianCaseInsensitiveMariaDb = 608,
286300
Utf8Mb4MyanmarCaseInsensitive = 609,
287301
Utf8Mb4ThaiUnicode520Weight2 = 610,
@@ -315,7 +329,7 @@ internal enum CharacterSet : ushort
315329
GbkChineseNoPadCaseInsensitive = 1052,
316330
Latin5TurkishNoPadCaseInsensitive = 1054,
317331
Armscii8GeneralNoPadCaseInsensitive = 1056,
318-
Utf8GeneralNoPadCaseInsensitive = 1057,
332+
Utf8Mb3GeneralNoPadCaseInsensitive = 1057,
319333
Ucs2GeneralNoPadCaseInsensitive = 1059,
320334
Cp866GeneralNoPadCaseInsensitive = 1060,
321335
Keybcs2GeneralNoPadCaseInsensitive = 1061,
@@ -357,7 +371,7 @@ internal enum CharacterSet : ushort
357371
Cp850NoPadBinary = 1104,
358372
Cp852NoPadBinary = 1105,
359373
Swe7NoPadBinary = 1106,
360-
Utf8NoPadBinary = 1107,
374+
Utf8Mb3NoPadBinary = 1107,
361375
Big5NoPadBinary = 1108,
362376
EuckrNoPadBinary = 1109,
363377
Gb2312NoPadBinary = 1110,
@@ -378,8 +392,8 @@ internal enum CharacterSet : ushort
378392
Ucs2Unicode520NoPadCaseInsensitive = 1174,
379393
Utf32UnicodeNoPadCaseInsensitive = 1184,
380394
Utf32Unicode520NoPadCaseInsensitive = 1206,
381-
Utf8UnicodeNoPadCaseInsensitive = 1216,
382-
Utf8Unicode520NoPadCaseInsensitive = 1238,
395+
Utf8Mb3UnicodeNoPadCaseInsensitive = 1216,
396+
Utf8Mb3Unicode520NoPadCaseInsensitive = 1238,
383397
Utf8Mb4UnicodeNoPadCaseInsensitive = 1248,
384398
Utf8Mb4Unicode520NoPadCaseInsensitive = 1270,
385399
}

src/MySqlConnector/Protocol/Serialization/ProtocolUtility.cs

Lines changed: 49 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -192,48 +192,48 @@ public static int GetBytesPerCharacter(CharacterSet characterSet)
192192
return 2;
193193

194194
case CharacterSet.UjisJapaneseCaseInsensitive:
195-
case CharacterSet.Utf8GeneralCaseInsensitive:
196-
case CharacterSet.Utf8ToLowerCaseInsensitive:
197-
case CharacterSet.Utf8Binary:
195+
case CharacterSet.Utf8Mb3GeneralCaseInsensitive:
196+
case CharacterSet.Utf8Mb3ToLowerCaseInsensitive:
197+
case CharacterSet.Utf8Mb3Binary:
198198
case CharacterSet.UjisBinary:
199199
case CharacterSet.EucjpmsJapaneseCaseInsensitive:
200200
case CharacterSet.EucjpmsBinary:
201-
case CharacterSet.Utf8UnicodeCaseInsensitive:
202-
case CharacterSet.Utf8IcelandicCaseInsensitive:
203-
case CharacterSet.Utf8LatvianCaseInsensitive:
204-
case CharacterSet.Utf8RomanianCaseInsensitive:
205-
case CharacterSet.Utf8SlovenianCaseInsensitive:
206-
case CharacterSet.Utf8PolishCaseInsensitive:
207-
case CharacterSet.Utf8EstonianCaseInsensitive:
208-
case CharacterSet.Utf8SpanishCaseInsensitive:
209-
case CharacterSet.Utf8SwedishCaseInsensitive:
210-
case CharacterSet.Utf8TurkishCaseInsensitive:
211-
case CharacterSet.Utf8CzechCaseInsensitive:
212-
case CharacterSet.Utf8DanishCaseInsensitive:
213-
case CharacterSet.Utf8LithuanianCaseInsensitive:
214-
case CharacterSet.Utf8SlovakCaseInsensitive:
215-
case CharacterSet.Utf8Spanish2CaseInsensitive:
216-
case CharacterSet.Utf8RomanCaseInsensitive:
217-
case CharacterSet.Utf8PersianCaseInsensitive:
218-
case CharacterSet.Utf8EsperantoCaseInsensitive:
219-
case CharacterSet.Utf8HungarianCaseInsensitive:
220-
case CharacterSet.Utf8SinhalaCaseInsensitive:
221-
case CharacterSet.Utf8German2CaseInsensitive:
222-
case CharacterSet.Utf8CroatianCaseInsensitive:
223-
case CharacterSet.Utf8Unicode520CaseInsensitive:
224-
case CharacterSet.Utf8VietnameseCaseInsensitive:
225-
case CharacterSet.Utf8GeneralMySql500CaseInsensitive:
226-
case CharacterSet.Utf8CroatianCaseInsensitiveMariaDb:
227-
case CharacterSet.Utf8MyanmarCaseInsensitive:
228-
case CharacterSet.Utf8ThaiUnicode520Weight2:
201+
case CharacterSet.Utf8Mb3UnicodeCaseInsensitive:
202+
case CharacterSet.Utf8Mb3IcelandicCaseInsensitive:
203+
case CharacterSet.Utf8Mb3LatvianCaseInsensitive:
204+
case CharacterSet.Utf8Mb3RomanianCaseInsensitive:
205+
case CharacterSet.Utf8Mb3SlovenianCaseInsensitive:
206+
case CharacterSet.Utf8Mb3PolishCaseInsensitive:
207+
case CharacterSet.Utf8Mb3EstonianCaseInsensitive:
208+
case CharacterSet.Utf8Mb3SpanishCaseInsensitive:
209+
case CharacterSet.Utf8Mb3SwedishCaseInsensitive:
210+
case CharacterSet.Utf8Mb3TurkishCaseInsensitive:
211+
case CharacterSet.Utf8Mb3CzechCaseInsensitive:
212+
case CharacterSet.Utf8Mb3DanishCaseInsensitive:
213+
case CharacterSet.Utf8Mb3LithuanianCaseInsensitive:
214+
case CharacterSet.Utf8Mb3SlovakCaseInsensitive:
215+
case CharacterSet.Utf8Mb3Spanish2CaseInsensitive:
216+
case CharacterSet.Utf8Mb3RomanCaseInsensitive:
217+
case CharacterSet.Utf8Mb3PersianCaseInsensitive:
218+
case CharacterSet.Utf8Mb3EsperantoCaseInsensitive:
219+
case CharacterSet.Utf8Mb3HungarianCaseInsensitive:
220+
case CharacterSet.Utf8Mb3SinhalaCaseInsensitive:
221+
case CharacterSet.Utf8Mb3German2CaseInsensitive:
222+
case CharacterSet.Utf8Mb3CroatianCaseInsensitive:
223+
case CharacterSet.Utf8Mb3Unicode520CaseInsensitive:
224+
case CharacterSet.Utf8Mb3VietnameseCaseInsensitive:
225+
case CharacterSet.Utf8Mb3GeneralMySql500CaseInsensitive:
226+
case CharacterSet.Utf8Mb3CroatianCaseInsensitiveMariaDb:
227+
case CharacterSet.Utf8Mb3MyanmarCaseInsensitive:
228+
case CharacterSet.Utf8Mb3ThaiUnicode520Weight2:
229229
case CharacterSet.UjisJapaneseNoPadCaseInsensitive:
230-
case CharacterSet.Utf8GeneralNoPadCaseInsensitive:
231-
case CharacterSet.Utf8NoPadBinary:
230+
case CharacterSet.Utf8Mb3GeneralNoPadCaseInsensitive:
231+
case CharacterSet.Utf8Mb3NoPadBinary:
232232
case CharacterSet.UjisNoPadBinary:
233233
case CharacterSet.EucjpmsJapaneseNoPadCaseInsensitive:
234234
case CharacterSet.EucjpmsNoPadBinary:
235-
case CharacterSet.Utf8UnicodeNoPadCaseInsensitive:
236-
case CharacterSet.Utf8Unicode520NoPadCaseInsensitive:
235+
case CharacterSet.Utf8Mb3UnicodeNoPadCaseInsensitive:
236+
case CharacterSet.Utf8Mb3Unicode520NoPadCaseInsensitive:
237237
return 3;
238238

239239
case CharacterSet.Utf8Mb4GeneralCaseInsensitive:
@@ -368,6 +368,20 @@ public static int GetBytesPerCharacter(CharacterSet characterSet)
368368
case CharacterSet.Utf8Mb4RussianUca900AccentSensitiveCaseSensitive:
369369
case CharacterSet.Utf8Mb4ChineseUca900AccentSensitiveCaseSensitive:
370370
case CharacterSet.Utf8Mb4Uca900Binary:
371+
case CharacterSet.Utf8Mb4NorwegianBokmal0900AccentInsensitiveCaseInsensitive:
372+
case CharacterSet.Utf8Mb4NorwegianBokmal0900AccentSensitiveCaseSensitive:
373+
case CharacterSet.Utf8Mb4NorwegianNynorsk0900AccentInsensitiveCaseInsensitive:
374+
case CharacterSet.Utf8Mb4NorwegianNynorsk0900AccentSensitiveCaseSensitive:
375+
case CharacterSet.Utf8Mb4SerbianLatin0900AccentInsensitiveCaseInsensitive:
376+
case CharacterSet.Utf8Mb4SerbianLatin0900AccentSensitiveCaseSensitive:
377+
case CharacterSet.Utf8Mb4Bosnian0900AccentInsensitiveCaseInsensitive:
378+
case CharacterSet.Utf8Mb4Bosnian0900AccentSensitiveCaseSensitive:
379+
case CharacterSet.Utf8Mb4Bulgarian0900AccentInsensitiveCaseInsensitive:
380+
case CharacterSet.Utf8Mb4Bulgarian0900AccentSensitiveCaseSensitive:
381+
case CharacterSet.Utf8Mb4Galician0900AccentInsensitiveCaseInsensitive:
382+
case CharacterSet.Utf8Mb4Galician0900AccentSensitiveCaseSensitive:
383+
case CharacterSet.Utf8Mb4MongolianCyrillic0900AccentInsensitiveCaseInsensitive:
384+
case CharacterSet.Utf8Mb4MongolianCyrillic0900AccentSensitiveCaseSensitive:
371385
case CharacterSet.Utf8Mb4CroatianCaseInsensitiveMariaDb:
372386
case CharacterSet.Utf8Mb4MyanmarCaseInsensitive:
373387
case CharacterSet.Utf8Mb4ThaiUnicode520Weight2:

tests/MySqlConnector.Tests/FakeMySqlServerConnection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ private void WriteInitialHandshake(BinaryWriter writer)
263263
writer.Write(authData, 0, 8); // auth plugin data part 1
264264
writer.Write((byte) 0); // filler
265265
writer.Write((ushort) capabilities);
266-
writer.Write((byte) CharacterSet.Utf8Binary); // character set
266+
writer.Write((byte) CharacterSet.Utf8Mb3Binary); // character set
267267
writer.Write((ushort) 0); // status flags
268268
writer.Write((ushort) ((uint) capabilities >> 16));
269269
writer.Write((byte) authData.Length);

0 commit comments

Comments
 (0)