У меня есть база данных MySQL, насколько я могу сказать utf8 насквозь.Эта база данных изначально использовалась исключительно приложением Ruby on Rails, у которого нет проблем с записью и чтением символов utf8.
Однако при попытке чтения через приложение ac # с помощью Dapper я вижу много плохих символовНапример:
Ожидаемый: FELIZ AÑO
Фактический: FELIZ AÑO
Моя строка подключения выглядит следующим образом:
Server=;Database=;Uid=;Pwd=;Port=;SslMode=;charset=utf8;
Я пробовал несколько комбинаций кодировкии UTF8 капитализация, но никто не работал до сих пор.В одном потоке я прочитал, что кодировка в строке соединения влияет только на язык запросов SQL, поэтому, если это правильно, то это не поможет!
Есть ли что-то еще, что мне потенциально не хватает?или что-нибудь еще, что я могу сделать, чтобы иметь возможность правильно читать символы?
Обновление: Некоторая информация из MySQL:
mysql> SELECT TABLE_NAME, COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE
-> FROM information_schema.columns
-> WHERE TABLE_NAME = 'pages'
-> AND COLUMN_NAME = 'title';
| TABLE_NAME | COLUMN_NAME | CHARACTER_SET_NAME | COLLATION_NAME | COLUMN_TYPE |
| pages | title | utf8 | utf8_general_ci | varchar(255) |
Обновление 2: Больше информации, кажется, что мои наборы символов немного испорчены ..
mysql> show variables like "character_set_%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
mysql> select collation_name from information_schema.columns where table_name = 'pages' and column_name = 'title';
+-----------------+
| collation_name |
+-----------------+
| utf8_general_ci |
+-----------------+
mysql> select title from pages where id = 3660;
+--------------------------------+
| title |
+--------------------------------+
| FELIZ AÑO |
+--------------------------------+
mysql> set character set 'latin1';
mysql> select title from pages where id = 3660;
+-----------------------------+
| title |
+-----------------------------+
| FELIZ AÑO |
+-----------------------------+
Итак, база данных - латиноамериканская, по умолчанию используется соединение utf8, клиент по умолчанию - utf8, столбец - utf8.
Если я запрашиваю столбец непосредственно в mysql, произойдет сбой, пока я не установлю набор символов в latin1.
Делаем то же самое в C # с помощью Execute для установки набора символов и ExecuteReader для чтения столбцавсе еще производит плохих персонажей.Попытка разобраться в разнице.
Обновление 3 - Скриншот для @BradleyGrainger, это от SequelPro
![enter image description here](https://i.stack.imgur.com/uWdQy.png)