Mysql
 sql >> база данни >  >> RDS >> Mysql

Когато използвате Entity Framework с MySQL, символите на Unicode се заменят с основни знаци

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
-- ?

Опитайте следното, за да коригирате това:

  1. Първият опит трябва да бъде да добавите следното към вашия низ за връзка, за да изпратите символни данни като UTF-8 към MySQL (това трябва просто да зададе character_set_connection ):

    CharSet=utf8;
    

    Пример за пълен низ за връзка тук

  2. Вторият опит трябва да бъде да изпратите SQL команда при първоначално свързване, за да зададете променливата на ниво сесия, която контролира кодирането на местоназначението:

    SET character_set_connection = utf8;
    

За повече информация, моля, вижте следното:

MySQL Charset/Collate

Според раздела "utf8 Collations" на тази страница би било много по-добре да използвате utf8_unicode_ci за Collation вместо utf8_general_ci (за да бъде ясно, тази препоръка няма нищо общо с проблема с преобразуването на знаци, който се разглежда тук).

P.S. Този въпрос/отговор има придружаващи въпроси и отговори на DBA.StackExhange:

Защо получавам неправилни знаци при декодиране на низ Base64 към NVARCHAR в SQL Server?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Чат на живо с PHP и jQuery. Къде да съхраняваме информация? Mysql или файл?

  2. CodeIgniter:Как да направите заявка за избор (различно име на поле) MySQL

  3. Създайте персонализиран метод за доставка в OpenCart:Част втора

  4. конвертиране на низ в дата php

  5. Заседнал в грешка 2 с mysql с помощта на XAMPP