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

  • Автор темы logist
  • 4266
  • Обновлено
  • 12, Dec 2006
  • #1
Вопрос к специалистам - какую кодировку нужно поставить на сервере - что-бы Delphi в запросах нормально понимал русские буквы - а то получается



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

logist


Рег
08 Dec, 2004

Тем
2

Постов
7

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

Requiem


Рег
15 Nov, 2004

Тем
1

Постов
7

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

logist


Рег
08 Dec, 2004

Тем
2

Постов
7

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

massacre


Рег
01 Feb, 2004

Тем
0

Постов
2

Баллов
2
  • 13, Dec 2006
  • #5
Немного о кодировках.

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

Requiem


Рег
15 Nov, 2004

Тем
1

Постов
7

Баллов
17
  • 13, Dec 2006
  • #6
Для Requiem:

Не совсем согласен - в книге по MySQL описано не так ..

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

"Вот пример отображения строк в кодировке latin1_de и utf8

_latin1_de 'abc'

_utf8 'def' "

и там дальше по тексту описывается что для латиныци это может и не иметь значения - а для кириллици .... оччень даже имеет
 

logist


Рег
08 Dec, 2004

Тем
2

Постов
7

Баллов
27
  • 13, Dec 2006
  • #7
logist, post: 625093:

"Вот пример отображения строк в кодировке latin1_de и utf8
_latin1_de 'abc'
_utf8 'def' "


Правильно и в этом случае 'abc'='def'. (Понятно что к какой кодировке относится)

Т.е. для тебя оно вроде и не равно, но для машины равно, поскольку с другой стороны 'abc' представляет собой массив из трех элементов, которые равны допустим 1,2,3. Так же и 'def'=1,2,3.

'abc' и 'def' - это то, что видишь ты, а комп в обоих этих случаях увидит 1,2,3

Хотя.

Ввод же происходит в соответствии с установленной кодировкой.

Хм, я бы на твоем месте попробовал для теста ввести запрос англ.

символами и проверить правильно ли оно все работает, возможно, дело, действительно, в кодировке.
 

Requiem


Рег
15 Nov, 2004

Тем
1

Постов
7

Баллов
17
  • 13, Dec 2006
  • #8
Английскими символами работает все нормально.

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

Разве это не и за кодировки?
 

logist


Рег
08 Dec, 2004

Тем
2

Постов
7

Баллов
27
  • 13, Dec 2006
  • #9
logist, post: 625095:
Разве это не и за кодировки?
Из-за кодировки .

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

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

Requiem


Рег
15 Nov, 2004

Тем
1

Постов
7

Баллов
17
  • 13, Dec 2006
  • #10
Requiem, post: 625096:
Из-за кодировки



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

 

logist


Рег
08 Dec, 2004

Тем
2

Постов
7

Баллов
27
  • 13, Dec 2006
  • #11
logist, post: 625097:
... резултат тот-же ГДЕ ГРАБЛИ !!!!!!
Ну тогда даже не знаю... Я склонен думать, что в твоей проге есть некий БАГ. И что-то не совсем понятна фраза "в одном обращение к запросу в другом напрямую к таблице".
 

Requiem


Рег
15 Nov, 2004

Тем
1

Постов
7

Баллов
17
  • 15, Dec 2006
  • #12
УРААААААААА поборол. Спасибо всем кто не оставался равнодушным к моей теме. Выставил на MySQL кодировку везде utf8_general_ci А в MyDAC -> Options -> Charset -> cp1251 и все заработало - и скажите после этого что не из за кодировки.
 

logist


Рег
08 Dec, 2004

Тем
2

Постов
7

Баллов
27
  • 15, Dec 2006
  • #13
Ну что я могу сказать.

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

Requiem


Рег
15 Nov, 2004

Тем
1

Постов
7

Баллов
17
  • 18, Dec 2006
  • #14
Requiem, post: 625100:
Ну что я могу сказать.... Что-то тут неправильно(либо прикладной софт либо прога автора)... Нормальная программа так работать не должна.
В любом случае тебе придется еще порешать этот вопрос, поскольку рядовой юзер(на которого по сути программа и расчитана) не будет колупаться в настройках MySQL или еще чего-то.
Копаться рядовому юзеру и не надо - админ устанавливает сервер - а программа настроена уже под конкретный сервер - рядовой пользоватеь только юзает прогу, в которой все настройки прописаны, а аффтор - он же я так понимаю и админ - сам настроит сервер для нормальной работы юзеров ;-)
 

ВпертийХохол


Рег
09 Dec, 2004

Тем
0

Постов
1

Баллов
1
  • 25, Mar 2014
  • #15
вот у меня почему база утф8 и если поставить кодаровку в утф8 то данные возвращаются в человеческом виде а текст который использую в конкате то он в абракадабре(( не понятно почему
 

romkau2


Рег
25 Mar, 2014

Тем
0

Постов
3

Баллов
3
  • 11, Apr 2014
  • #16
MyDAC -> Options -> Charset -> cp1251

Во первых не совсем правильно, если база будет доступна из интернета, например для странички, то глюки будут. Лучше всего перевести на UTF

mydac ломанный ? Скорее всего нужно обновить.

По своему опыту достаточно adoquery, никаких проблем с кодировкой и компанентами не возникает.

romkau2, post: 625102:
вот у меня почему база утф8 и если поставить кодаровку в утф8 то данные возвращаются в человеческом виде а текст который использую в конкате то он в абракадабре(( не понятно почему
Покажи код
 

neorad


Рег
27 Nov, 2009

Тем
0

Постов
4

Баллов
4
  • 19, Jun 2014
  • #17
всегда используйте UTF8, это позволит избежать таких ошибок и создаст возможность для развития приложения и выхода на зарубежные рынки
 

GuardianFree


Рег
10 Aug, 2011

Тем
1

Постов
3

Баллов
13
  • 27, Aug 2014
  • #18
проще в строке подключения добавить "STMT=SET CHARACTER SET cp1251;" или utf8 смотря в каких случаях.
 

victorsmail


Рег
28 Sep, 2013

Тем
0

Постов
3

Баллов
3
  • 04, Nov 2014
  • #19
Cahrset is simple solution My recommendation is to use utf8_general_ci collation for database. I have problems with Serbian charset and correct showing letters.
 

codebs


Рег
29 Oct, 2010

Тем
0

Постов
4

Баллов
4
  • 08, Apr 2015
  • #20
victorsmail, post: 625108:
проще в строке подключения добавить "STMT=SET CHARACTER SET cp1251;" или utf8 смотря в каких случаях.
Это не очень работает в старых версиях сервера, но очень удобно.
 

Zhrnya


Рег
06 May, 2010

Тем
0

Постов
4

Баллов
4
Тем
49554
Комментарии
57426
Опыт
552966

Интересно