Delphi + MySQL - проблема !!!

Status
Not open for further replies.

logist

Турист
Вопрос к специалистам - какую кодировку нужно поставить на сервере - что-бы Delphi в запросах нормально понимал русские буквы - а то получается

ищу контекст 'проба' а нахожу все с содержанием 'орова' ???
 

Requiem

Турист
Для начало тебе нужно разобраться что такое кодировка.....
Тут дело не в кодировке... Выкинь кусок кода, где у тебя происходит обработка вводимых данных/запроса, отсылка запроса и все, используемые при этом функции/процедуры... Скорее всего баг где-то там.
Только обязательно с коментами...
 

logist

Турист
Текст запроса показан - а текст процедуры очень простой:
Отключаю SQL, очищаю строку запроса, прописываю новый запрос, включаю SQL.
Строка запроса видна на "скриншоте".
Дело в кодировке на сервере и в приложении. Как их синхронизировать?
 

massacre

Турист
Если честно у меня на MySQL стоит кодировка latin1 и вообщем то нет ни каких проблем с стыковкой в Delphi
попробуй методом научного тыка cp1251
хотя не знаю не сталкивался с такими поблеммами.
А синхронизировать кодировки хм интересно, есть ли в этом вообще смысл ?
 

Requiem

Турист
Немного о кодировках... Что оно собою представляет изнутри?
В двух словах мы имеем таблицу, в которой просто описывается как рисовать символ под номером N.
Но машина оперирует номерами символов, а не самими символами, так что ей абсолютно пофигу на то, какая кодировка используется, ведь 2=2 в любом случае.
 

logist

Турист
Для Requiem:
Не совсем согласен - в книге по MySQL описано не так ..

MySQL - Поль Дюбуа Второе издание стр.163.

"Вот пример отображения строк в кодировке latin1_de и utf8
_latin1_de 'abc'
_utf8 'def' "
и там дальше по тексту описывается что для латиныци это может и не иметь значения - а для кириллици .... оччень даже имеет
 
Last edited by a moderator:

Requiem

Турист
"Вот пример отображения строк в кодировке latin1_de и utf8
_latin1_de 'abc'
_utf8 'def' "
Правильно и в этом случае 'abc'='def'. (Понятно что к какой кодировке относится)
Т.е. для тебя оно вроде и не равно, но для машины равно, поскольку с другой стороны 'abc' представляет собой массив из трех элементов, которые равны допустим 1,2,3. Так же и 'def'=1,2,3.
'abc' и 'def' - это то, что видишь ты, а комп в обоих этих случаях увидит 1,2,3

Хотя... Ввод же происходит в соответствии с установленной кодировкой... Хм, я бы на твоем месте попробовал для теста ввести запрос англ. символами и проверить правильно ли оно все работает, возможно, дело, действительно, в кодировке.
 
Last edited by a moderator:

logist

Турист
Английскими символами работает все нормально.
А как ты объясниш тот факт что если я меняю кодировку на сервере на latin1 тогда он слово "проба" не находит вообще (его в принципе нет в справочнике) а на запрос "проб" - отбирает все записи с контекстом "пров". Случай описаный вначале был с кодировкой cp1250.
Разве это не и за кодировки?
 

Requiem

Турист
Разве это не и за кодировки?
Из-за кодировки :).
Только бок не в самом сервере MySQL, а в том, что сама твоя база данных была набита с использованием другой кодировки(скорее всего совсем другой прогой).
Посему вопрос "какую кодировку нужно поставить на сервере" звучит немного глупо, поскольку база данных просто хранит данные(без каких либо изменений), а выставить кодировку можно разве только для их отображения пользователю.
 

logist

Турист
Из-за кодировки :).
Только бок не в самом сервере MySQL, а в том, что сама твоя база данных была набита с использованием другой кодировки(скорее всего совсем другой прогой).
Посему вопрос "какую кодировку нужно поставить на сервере" звучит немного глупо, поскольку база данных просто хранит данные(без каких либо изменений), а выставить кодировку можно разве только для их отображения пользователю.
Набиваю в той же программе открыл два грида в одном обращение к запросу в другом напрямую к таблице. Добавляю в таблицу значения - потом запросом их обрабатываю - результат тот-же ГДЕ ГРАБЛИ !!!!!!

 
Last edited by a moderator:

Requiem

Турист
... резултат тот-же ГДЕ ГРАБЛИ !!!!!!
Ну тогда даже не знаю...
Я склонен думать, что в твоей проге есть некий БАГ.
И что-то не совсем понятна фраза "в одном обращение к запросу в другом напрямую к таблице".
 

logist

Турист
УРААААААААА поборол.
Спасибо всем кто не оставался равнодушным к моей теме.
Выставил на MySQL кодировку везде utf8_general_ci
А в MyDAC -> Options -> Charset -> cp1251 и все заработало - и скажите после этого что не из за кодировки.
 

Requiem

Турист
Ну что я могу сказать.... Что-то тут неправильно(либо прикладной софт либо прога автора)... Нормальная программа так работать не должна.
В любом случае тебе придется еще порешать этот вопрос, поскольку рядовой юзер(на которого по сути программа и расчитана) не будет колупаться в настройках MySQL или еще чего-то.
 
Ну что я могу сказать.... Что-то тут неправильно(либо прикладной софт либо прога автора)... Нормальная программа так работать не должна.
В любом случае тебе придется еще порешать этот вопрос, поскольку рядовой юзер(на которого по сути программа и расчитана) не будет колупаться в настройках MySQL или еще чего-то.
Копаться рядовому юзеру и не надо - админ устанавливает сервер - а программа настроена уже под конкретный сервер - рядовой пользоватеь только юзает прогу, в которой все настройки прописаны, а аффтор - он же я так понимаю и админ - сам настроит сервер для нормальной работы юзеров ;-)
 

romkau2

Турист
вот у меня почему база утф8 и если поставить кодаровку в утф8 то данные возвращаются в человеческом виде а текст который использую в конкате то он в абракадабре(( не понятно почему
 
Status
Not open for further replies.
Top