кодировка в MySQL

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Аватара пользователя
Pirr
новенький
Сообщения: 21
Зарегистрирован: 21.10.2009 11:50:46

Сообщение Pirr »

GAMER писал(а):Попробуй отправить запрос set names utf8

Попробовал, не помогает :(
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

1. Чистый запрос или после предыдущих? Попробуй чистый (сразу после подключения к серверу)
2. Версия Лазаруса какая?
Аватара пользователя
Pirr
новенький
Сообщения: 21
Зарегистрирован: 21.10.2009 11:50:46

Сообщение Pirr »

GAMER писал(а):1. Чистый запрос или после предыдущих? Попробуй чистый (сразу после подключения к серверу)
2. Версия Лазаруса какая?

1. Чистый, и у меня пока один запрос SELECT * FROM table
2. Lazarus 0.9.28

Попробовал создать новую таблицу, и указал ей кодировку при создании utf8, всё заработало, русские буквы видно. Но как же работать с таблицами в latin1 ?
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Такая проблема возникает, когда данные в таблицах храняться не в той кодировке, в которой указано их хранение.

Моя цитата с другого форума:
А консольный клиент почему не используешь?

Мне кажеться, что у тебя следующая проблема:
Сервер хранит данные в кодировке ср1.
Для того, чтобы он мог работать с разными клиентами в разных кодировках, он может получить команду set names cp2.
Тогда он будет сам перекодировать и отдавать даные клиенту в кодировке ср2. Но если клиент говорит, что будет работать в кодировке ср2, а на самом деле работает в кодировке ср3, то на сервер попадут даные в кривоперекодированом виде. При этом работа даного клиента и сервера будет казаться, что проходит правильно, то есть даные будут читаться правильно. При этом другой клиент уже будет получать кривоперекодированые данные и получит мусор.

Чтобы определить, где затык, нужно с сервером работать в заведомо известной кодировке. То есть, если точно известно, что клиент будет рабоатть в кодировке ср4, то и указывать set names cp4;

Возможно у тебя Пма говорит, что работает в кои8, а броузер при этом забивает даные в вин1251. Тогдп ПМА будет данные показывать верно, но все другие клиенты покажут бред.
racotr
новенький
Сообщения: 14
Зарегистрирован: 18.12.2009 23:32:56
Откуда: Braneapol

Сообщение racotr »

Попробуй отправить запрос

Код: Выделить всё

Код: Выделить всё
    set names utf8



Представляете, работает. Я в шоке. расскажите что вообще деллает это set names utf8
Аватара пользователя
AbakAngelSoft
постоялец
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар
Контактная информация:

Сообщение AbakAngelSoft »

set names устанавливает несколько переменных внутри MySql которые отвечают за кодировки при соединении с сервером для корректной перекодировке на лету.
например на диске все в cp1251 сервер обрабатывает в koi8 отправляет в utf8 а клиент получает опять в cp1251. :)
Все эти переменные можно установить по отдельности, что не очень разумно - как в приведенной схеме.
set names устанавливает все вместе в одну кодировку, кроме той что хранится на диске - она естественно не меняется.
Ответить