Ошибка кодировки при добавлении в MySql

Shytov

Client
Регистрация
11.09.2018
Сообщения
175
Благодарностей
39
Баллы
28
Доброго всем времени суток ув.
Кто в курсе, подскажите пожалуйста в чем может быть проблема?

Добавляю через постер записть в БД - фио, мыло, телефон. Почему-то кирилица отображается знаками вопроса, при отправке запроса через постер. В тоже время если отправить тот же запрос через WorkBench или php my admin то все проходит корректно. Раньше таких проблем не было.

Грешил с начала на кодировку, перепробовал все возможные конвертации - ни в какую! Вроде бы маленькая проблема, а уже второй день не могу победить.

База находится на хостинге reg.ru, таблица создавалась через php my admin хостинга. Кодировка таблицы utf8 - utf8_bin
Последняя версия 5го постера.

Код:
//mysql connect
string[] connect_data = new[] {
    string.Format(@"server={0}",project.Variables["serv_mysql"].Value),
    string.Format(@"user id={0}",project.Variables["user_mysql"].Value),
    string.Format(@"password={0}",project.Variables["pass_mysql"].Value),
    string.Format(@"database={0}",project.Variables["database_mysql"].Value),
    string.Format(@"port={0}",project.Variables["port_mysql"].Value),
    "persistsecurityinfo=True"
};
string data_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
string connect_db = string.Join(";", connect_data);
string table_name = project.Variables["table_name"].Value;

string name = "Иван Иванов";
string phone = "+1111111111111111";
string email = "[email protected]";

//encoding
string content = name;
Encoding utf8 = Encoding.GetEncoding("UTF-8");
Encoding win1251 = Encoding.GetEncoding("Windows-1251");
byte[] win1251Bytes = utf8.GetBytes(content);
byte[] utf8Bytes = Encoding.Convert(win1251, utf8, win1251Bytes);
name = utf8.GetString(utf8Bytes);


        //mysql
        string SQL = string.Format("LOCK TABLES `{0}` WRITE;",table_name);
            SQL += Environment.NewLine;
            SQL += string.Format(@"INSERT INTO `{0}` (`name`, `email`, `phone`, `tour_visit`, `from_contacts`, `add_data`) VALUES ('{1}','{2}','{3}','{4}','{5}','{6}');",table_name, name, email, phone, "", "IK", data_time);
            SQL += Environment.NewLine;
            SQL += "UNLOCK TABLES;";
        string resp = ZennoPoster.Db.ExecuteScalar(SQL, null, ZennoLab.InterfacesLibrary.Enums.Db.DbProvider.MySqlClient, connect_db, throwExceptions: true);
 
Последнее редактирование:

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113

Shytov

Client
Регистрация
11.09.2018
Сообщения
175
Благодарностей
39
Баллы
28

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 596
Благодарностей
1 014
Баллы
113
Через phpmyadmin на русском нормально заходит?

//encoding
string content = name;
Encoding utf8 = Encoding.GetEncoding("UTF-8");
Encoding win1251 = Encoding.GetEncoding("Windows-1251");
byte[] win1251Bytes = utf8.GetBytes(content);
byte[] utf8Bytes = Encoding.Convert(win1251, utf8, win1251Bytes);
name = utf8.GetString(utf8Bytes);

Вот это точно надо, а если убрать?
 

Shytov

Client
Регистрация
11.09.2018
Сообщения
175
Благодарностей
39
Баллы
28

Shytov

Client
Регистрация
11.09.2018
Сообщения
175
Благодарностей
39
Баллы
28
//encoding
string content = name;
Encoding utf8 = Encoding.GetEncoding("UTF-8");
Encoding win1251 = Encoding.GetEncoding("Windows-1251");
byte[] win1251Bytes = utf8.GetBytes(content);
byte[] utf8Bytes = Encoding.Convert(win1251, utf8, win1251Bytes);
name = utf8.GetString(utf8Bytes);

Вот это точно надо, а если убрать?
и так и так - без разницы
 

Shytov

Client
Регистрация
11.09.2018
Сообщения
175
Благодарностей
39
Баллы
28
Я так подозреваю что это баг зенки
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
Я так подозреваю что это баг зенки
Скорее это баг твоих знаний по работе с MySQL :-)
В строку подключения к БД нужно добавить characterset=utf8;
C#:
//mysql connect
string[] connect_data = new[] {
    string.Format(@"server={0}",project.Variables["serv_mysql"].Value),
    string.Format(@"user id={0}",project.Variables["user_mysql"].Value),
    string.Format(@"password={0}",project.Variables["pass_mysql"].Value),
    string.Format(@"database={0}",project.Variables["database_mysql"].Value),
    string.Format(@"characterset={0}",project.Variables["characterset"].Value),       //project.Variables["characterset"].Value) = "utf8";
    string.Format(@"port={0}",project.Variables["port_mysql"].Value),
    "persistsecurityinfo=True"
};
 
  • Спасибо
Реакции: Shytov

Shytov

Client
Регистрация
11.09.2018
Сообщения
175
Благодарностей
39
Баллы
28
Скорее это баг твоих знаний по работе с MySQL :-)
В строку подключения к БД нужно добавить characterset=utf8;
Если бы Вы, внимательнее читали первый пост, то заметели предложение о том, что раньше, таких проблем не было.
Ну и да, если бы знал, не спрашивал бы.

Спасибо, помогло =)
 
  • Спасибо
Реакции: Koqpe

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)