Исключение MySql: переменная 'клиент набора символов' не может быть установлена в значение 'utf16'

ранее я использую sql server 2005 в базе данных моего сайта, и все работает хорошо. теперь я изменился на MySql server 5.5 база данных, потому что она с открытым исходным кодом.

Я использовал Navicat Premium для передачи моих данных с sql server в mysql. Я использую MySQL workbench и navicat для управления моей базой данных. Проблемы возникают, когда я объявляю соединение с базой данных mysql. вот мой код:

    MySqlCommand cmdselect;
    MySqlConnection conNDB;
    MySqlDataReader Mydtr;
    string server = "localhost";
    string database = "maindb";
    string uid = "root";
    string password = "abc123";
    string strCon = "SERVER=" + server + ";" + "DATABASE=" +
    database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
    string strSelect = "SELECT * FROM announcement"; 

    conNDB = new MySqlConnection(strCon);
    conNDB.Open();
    cmdselect = new MySqlCommand(strSelect, conNDB);
    Mydtr = cmdselect.ExecuteReader();

    rptAnnounce.DataSource = Mydtr;
    rptAnnounce.DataBind();

    Mydtr.Close();
    conNDB.Close();

ссылка на MySql.Данные уже установлены. Здесь я получил это сообщение об ошибке :

Сведения Об Исключении : Для MySQL.Данные.MySqlClient.MySqlException: Переменная 'character_set_client' не могу быть установлен в значение 'формате UTF16' Сообщение об ошибке указано, что эта ошибка возникает во время подключения.Open();

когда я продолжаю обновлять страницу ошибок, я получил еще одну ошибку. вот это:

Сведения Об Исключении: MySql.Данные.MySqlClient.MySqlException: ожидаемый конец пакета данных Сообщение об ошибке указано, что эта ошибка возникает во время Mydtr = cmdselect.ExecuteReader ();

Я новичок в mysql. я не знаю, в чем проблема. я предполагаю, что эта проблема исходит из настроек базы данных или данных, а не из моего исходного кода.

кто-нибудь знает решение? ваша помощь очень ценится. я пытался в течение 4 дней, но не может решить.

4 ответов


решена!! Благодаря @Etienne Rached и @jeremi

все проблемы исходят из проблемы набора символов.

решение: загрузите navicat, чтобы изменить набор символов для базы данных и каждой таблицы.

есть 2 места, которые вам нужно проверить:

1) Щелкните правой кнопкой мыши на базе данных, например. базы данных mydb. Затем выберите Свойства и задайте набор символов

2) щелкните правой кнопкой мыши на таблице и выберите таблица параметров. щелкните каждый одна строка для изменения набора символов и, наконец, перейдите на вкладку "опция" и измените набор символов.

для вашей информации: это очень редкий случай. Я google почти не могу найти решение. я создал эту ошибку во время установки Mysql, я выбрал формат utf16 >

кстати, простая connectionstring будет работать. как

"server=localhost;database=maindb;uid=root;pwd=abc123;CharSet=utf8; port=3306";

Привет, чтобы добавить к вышеперечисленным пунктам.

начиная с версии MySQL 5.5, он не поддерживает кодировку набора символов utf16 или utf32.

есть несколько вещей, которые нужно смотреть с обоих

  1. клиент делает подключение к DB
  2. сам DB

на стороне клиента он вызывает запрос к БД с запросом, закодированным в определенном формате, и сервер intact должен понимать эти запросы и отвечать в особый формат, который клиент может понять в свою очередь.

Точка 1: поэтому нам нужно установить кодировку на уровне клиента, в строке подключения, как

Charset=utf8;

и, в свою очередь, вы должны проверить с БД и таблицей (к которой вы ищете транзакцию запроса) charset и collation

существует четыре уровня кодирования кодировки и сортировки на сервере MySQL для гибкости

  1. кодировка для всего сервера server_character_set
  2. кодировка для базы данных
  3. кодировка для таблицы
  4. кодировка для столбцов таблицы, а также

вы можете проверить эти значения, используя следующий запрос

show variables like 'character%';
show variables like '%collation%';

Итак, точка-это сервер БД, считывающий эти запросы в кодировке, указанной в строке подключения.

пункт 2 вместо указания набора символов в строке подключения можно также задать кодировку для клиента (в который сервер прерывает ) при запросе после открытия соединения

set names 'charset';
Ex: set names 'utf8';

есть 3 параметра сервера, значительные в конкретных проблемах кодировки от клиента к серверу character_set_client - сервер задает указанную кодировку для клиентских запросов, переданных character_set_connection - сервер устанавливает указанную кодировку для транзакции подключения character_set_results - сервер устанавливает указанную кодировку для возвращаемых результатов, сообщений об ошибках из БД в клиент

пункт 3 вместо Точки 1 и 2, Вы можете установить эти переменные в БД, чтобы обеспечить правильную транзакцию клиентского сервера

в основном, клиент и тип кодирования и сортировки БД(сервер, таблица БД, столбец) должны быть похожи, чтобы избежать потерь данных во время транзакций БД.

надеюсь, что это помогает.....


может быть, вы пытаетесь поговорить с utf16, но база данных только sopports utf8 или какой-то другой.

попробуйте добавить это в строку подключения:

Character Set=utf8

моя строка подключения выглядит следующим образом:

"server=" + settings.DatabaseHost + 
";User Id=" + settings.DatabaseUsername +
";password="+ settings.DatabasePassword +
";database="+ settings.DatabaseName+
";Persist Security Info=True" +
";Connect Timeout=5;Default Command Timeout=10" +
";Character Set=utf8";

Если это не работает, попробуйте ASCII или latin1


эта ошибка " сведения об исключении: система.Коллекции.Родовой.KeyNotFoundException: "может произойти, если вы не обновили клиентскую библиотеку MySql после обновления набора символов строки соединения до utf8mb4

пожалуйста, обновите MySql.данные.dll библиотека версии до последней версии 6.6.5.0

надеюсь, это должно решить ключ не найдено исключение.