MySQL позволява конфигуриране на няколко аспекта на комуникацията клиент-сървър (съгласно 10.4 Набори от символи за свързване и съпоставяне документация):
- Изходно (т.е. клиентско) кодиране:
character_set_client
- Кодиране на местоназначение (т.е. сървър):
character_set_connection
- Върнати данни и метаданни:
character_set_results
Предполагам, че се предполага, че изходното кодиране, идващо от технология на Microsoft, е UTF-16 Little Endian.
Що се отнася до другите две, Connector/ Справка за опциите за низове за връзка NET документацията гласи:
На връзката с MySQL трябва да се каже, че целевото кодиране е UTF-8 (което използват вашите MySQL колони). Понастоящем MySQL приема, че изпращате низове, различни от Unicode, което на практика прави същото като преобразуването в VARCHAR
в SQL Server, като приемем, че кодовата страница, посочена от подразбиращото се сравняване на текущата база данни, е 1252 (кодовата страница на Windows 1252 обикновено се нарича "ANSI
", дори ако това е технически неточно име).
Следното показва поведението в SQL Server, като не се поставя префикс на низа с главни букви "N":
SELECT 'α'; -- Database's default Collation = Latin1_General_100_CI_AS_SC
-- a
SELECT 'α'; -- Database's default Collation = Hebrew_100_BIN2
-- ?
Опитайте следното, за да коригирате това:
-
Първият опит трябва да бъде да добавите следното към вашия низ за връзка, за да изпратите символни данни като UTF-8 към MySQL (това трябва просто да зададе
character_set_connection
):CharSet=utf8;
Пример за пълен низ за връзка тук
-
Вторият опит трябва да бъде да изпратите SQL команда при първоначално свързване, за да зададете променливата на ниво сесия, която контролира кодирането на местоназначението:
SET character_set_connection = utf8;
За повече информация, моля, вижте следното:
Според раздела "utf8 Collations" на тази страница би било много по-добре да използвате utf8_unicode_ci
за Collation вместо utf8_general_ci
(за да бъде ясно, тази препоръка няма нищо общо с проблема с преобразуването на знаци, който се разглежда тук).
P.S. Този въпрос/отговор има придружаващи въпроси и отговори на DBA.StackExhange:
Защо получавам неправилни знаци при декодиране на низ Base64 към NVARCHAR в SQL Server?