Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ADO + MySQL кодировка [XP]


NIIL ©   (2009-07-04 15:29:00) 

Ситуация следующая есть локальный MySQL сервер 5.1.11, имеется база данный и таблица в кодировке utf8, используя TADOConnection, собирая строку подключения связываюсь с пользовательским источником MySQL ODBC коннектором версии 5.1. Получаю имена столбцов - русские буквы отображаются нормально. А вот при внесении записи через TAdoQuery (соединение через тот же AdoConnection) в базу вставляется каша - следовательно проблемы с кодировкой, знаю что D6-D7 не поддерживают utf8, но исп. CodeGear Delphi 11. Выполнял перед вставкой  записи SET CHARSET utf8 - не помогло SET NAMES коннектор 5.1 не поддерживает и в интерфейсе коннектора создания подключения строки инициализации и выбора кодироки нет, хотя в 3.5 была. Как быть кто сталкивался.


Anatoly Podgoretsky   (2009-07-05 10:54:00) [1]

> NIIL  (05.07.2009 10:17:07)  [7]

> только после Utf8ToAnsi получаю нормальный русский текс

Вот, а говорил, что поддрежки нет.


NIIL   (2009-07-05 10:17:00) [2]

Спасибо всем. Разобрался. Решилось методом топора, но пока и так нормально. Проблема была в том, что если использовать Parameter в AdoQuery, то кодировка полей с русскими символами сбивалась. Если же формировать SQL.Text без использования параметров, то запись вносится корректно.

>  Автор видимо плохо разбирается в теме, даже Д6/Д7 приплел.
>  Для его сведенья даже Д2 нормально поддерживал UTF8.

На работе пишу на D6 за неимением другого, так там при получеии записей из таблицы в utf8 вылезает каша и только после Utf8ToAnsi получаю нормальный русский текст. А про не поддержку вычитал на одном из форумов.


palva   (2009-07-04 20:50:00) [3]

Совет автору отложить пока делфи-одбц, зайти на сервер консольным клиентом mysql и через него разобраться с кодировками. При этом учитывать, что консоль работает в кодировке DOS, то есть надо еще научиться отправлять на сервер запросы в разных кодировках.


Anatoly Podgoretsky   (2009-07-04 20:45:00) [4]

Конечно может, но тогда не говорят/не стоит говорить об


> имеется база данный и таблица в кодировке utf8,

Между прочим недавно был аналогичный вопрос про Юникод и про Файрберд, так разработчики утверждали именно подобное, о поддержке Юникода через UTF8 и ставили знак равенства между ними. Ну тут понятно, они стремятся на замену MySQL на платформе Линукс (личное мнение). Для веб сайтов это конечно удобно, не надо делать перекодировку в utf8 на сайте при выборке из базы, но к поддержке Юникод или к рабочей кодировке это относится только опосредтвовано.

Автор видимо плохо разбирается в теме, даже Д6/Д7 приплел.
Для его сведенья даже Д2 нормально поддерживал UTF8.


palva   (2009-07-04 20:42:00) [5]

Вообще для пользователя не очень важно, в каком виде база хранит тексты. Для него важно с использованием какой кодировки она их сортирует и в какой кодировке возвращает.
А с хранением туго. Я даже не представляю, можно ли определить кодировку хранения, кроме как открыть hex-редактором файл с таблицей.


KilkennyCat   (2009-07-04 20:34:00) [6]

Возможно, глупость скажу, а разве sql-база не может содержать помимо данных еще и некий метод их обработки?


Anatoly Podgoretsky   (2009-07-04 20:30:00) [7]


> Почему вы думаете, что в базе находятся русские буквы в
> кодировке UTF8?

Естественно это весьма сомнительно, что бы для хранения использовалась транспортная кодировка, лишая возможножнсти неточного поиска, сортировки, группировки и прочего.

Но разрабочики БД готовы и не такую лапшу на уши навешать, лишь бы было слово UTF8.


palva   (2009-07-04 20:21:00) [8]

То что вы написали, недостаточно для того, чтобы определить, где ошибка.
Кроме того, по вашему описанию возникает предположение, что вы вообще плохо представляете, что у вас там происходит.
Чего стоят например такие утверждения

> знаю что D6-D7 не поддерживают utf8
> SET NAMES коннектор 5.1 не поддерживает

А почему вы думаете, что в базу вставляется каша? Вы можете нам сказать какой символ исказился, какой шестнадцатеричный код был у этого символа в SQL-предложении и какой оказался в базе?
Почему вы думаете, что в базе находятся русские буквы в кодировке UTF8?

Я думаю, что если бы вы могли ответить на такие вопросы, то вы сразу же увидели, в чем дело.


Наверх

Титульная страница Поиск, карта сайта Написать письмо