Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: С# MySQL русский текст кракозябрами.  (Прочитано 13042 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Boriska
Помогающий

us
Offline Offline

« : 30-04-2021 18:26 » 

Коллеги привет. Кто подскажет.

в коннекшине CharSet=utf8; присутствует.
в коннекшине charset=utf8; присутствует.

Код: (C#)
_db.CreateMessage(1, "866 Труляля");
_db.CreateMessage(1, ToUTF8("866 Труляля"));

 private string ToUTF8(string source)
        {
            return System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Default.GetBytes(source));
        }

Смотришь в БД там кракозябры. Цифры отображаются норм.
Вроде все варианты перебрал какие советуют.


Код: (MySQL)
CREATE TABLE messages(
  MSGID INT (11) DEFAULT NULL,
  MSG VARCHAR (1024) DEFAULT NULL
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_general_ci;
« Последнее редактирование: 30-04-2021 18:30 от Boriska » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 30-04-2021 20:05 » 

use names, как обычно, поможет
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Boriska
Помогающий

us
Offline Offline

« Ответ #2 : 05-05-2021 11:27 » 

Нельзя ли поподробнее, чет не догоню как и че.
Если инсертить через DbForge то все вставлятся и вставлялось. Значит вопрос или в соединенеии или во вставляемых данных.
« Последнее редактирование: 06-05-2021 07:19 от Boriska » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 05-05-2021 21:33 » new

При подключении к СУБД клиент сообщает свою кодировку. Команда SET NAMES нужна, чтобы сообщить об этом.
https://dev.mysql.com/doc/refman/8.0/en/set-names.html
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Boriska
Помогающий

us
Offline Offline

« Ответ #4 : 06-05-2021 07:39 » 

После установления соединения нужно выполнить через него ?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 06-05-2021 11:14 » 

Да.

Документацию читать не пробовал? И гуглится легко, да и ссылку я дал. Также гуглится другой раздел доки, где описываются опции кодировок.

Основное, что стоит знать о кодировках mysql:
* кодировка хранения (может быть задано на уровне: базы, таблицы, колонки)
* кодировка сервера (кодировка обработки)
* кодировка клиента

Помимо кодировки есть еще сортировка (collation), влияет только на выборку и серверную обработку.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Boriska
Помогающий

us
Offline Offline

« Ответ #6 : 14-05-2021 11:57 » 

Привет. Ув RXL надо бы все одно обсудить этот вопрос. Сделал я _db.Operation("SET NAMES'utf8'"); Перед этим внес сообщения в базу через Forge. Запускаю все русский текст в БД нормально, читается тоже нормально. Потом думаю уберу SET NAMES. Смотрю ничего не изменилось. Кирилица нормально отображается. Убрал из строки подключения charset=utf8; - все равно нормально отображается. Т.е. если в БД лежит корректно, то это лишнее и совсем не надо было. Потом решил проверить запись в БД из программы проверил - SET NAMES не оказывает никакого положительного влияния. Запись в стандарной кодировке - кракозябры. ToUTF8 перед записью кракозябры. Я подумал - когда я в базу из Forge писал все отображалось на ура и следовательно конекшен не влиял ни на что, и  SET NAMES не влиял. Когда же рождаются кракосязбры именно при записи. Баг где то здесь, но ....Подсобляйте.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 14-05-2021 18:27 » 

Почитай все же документацию. Шаманизм — не наша профессия. Рецепта "чтобы всегда" нет, надо понимать, что в данных базы, что в памяти базы, что в протоколе, какие типы столбцов использованы.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines