Как записать текст UTF8 в MySQL из ASP.NET через ODBC? - PullRequest
2 голосов
/ 12 февраля 2009

Я использую MySQL 5 на виртуальном хостинге, подключаясь из ASP.NET 3.5 с помощью драйвера ODBC MySQL 5.1. Я хотел бы хранить строки UTF8. Раньше все мои таблицы были в "latin1_swedish_ci", но я преобразовал базу данных, таблицу и столбец в UTF8, используя:

ALTER DATABASE `my_db` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
ALTER TABLE `my_table`  DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
ALTER TABLE `my_table` CHANGE `subject` `subjext` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL

Но я все еще получаю эту ошибку при вставке не-ascii символов (например, "遊 ぶ") в мою базу данных с использованием ODBCConnection и ODBCCommand:

ERROR [HY000] [MySQL][ODBC 5.1 Driver][mysqld-5.0.51b-community-nt]Incorrect string value: '\xE3\x80\x80\xE6\x89\x8B...' for column 'subject' at row 1

Обратите внимание, что, поскольку я использую драйвер 5.1, я не могу использовать "SET NAMES utf8;" - выдает ошибку.

Есть идеи, что мне не хватает?

1 Ответ

3 голосов
/ 12 февраля 2009

Несколько вещей для проверки:

  1. Убедитесь, что ваши таблицы и текстовые поля действительно принимают utf8:
    Используйте MySQL Query Browser и попробуйте отредактировать некоторые данные вручную.
    Если после сохранения изменений все в порядке, поля и таблицы будут правильно установлены.

  2. Убедитесь, что вы фактически вставляете совместимые с utf8 символы, а не символы, основанные на другой форме кодирования, такой как GB2332 для китайского. В таком случае вам может потребоваться преобразовать строки в utf8, прежде чем вы сможете отправить их в базу данных.
    Вы можете взглянуть на использование класса Encoding в .Net.
    Я ответил на сообщение о чем-то, что было связано некоторое время назад, и есть статья CodeProject только по этой проблеме.

  3. Возможно, вам также необходимо убедиться, что строка подключения ODBC включает следующее:

    CharSet = utf8;

Существует список всех параметров , которые можно использовать для соединения ODBC.

...