Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: MySQL-ODBC-Builder (кодировки)
 
 автор: meskallito   (06.12.2006 в 19:33)   письмо автору
 
 

Значит вопрос такой.
Кодировка базы cp1251. Записи кооторые я ввожу на русском в самом мускуле, в билдере выходят абракадаброй. И наоборот, если вводить записи на русском в Билдере, то он их потом читает коректно, но в самой базе просмотреть их не получается. Вот такое вот везде - "???????????". Обьяните пожайлуста новичку где собака зарыта. И еще один вопрос в догонку. Есть варчарное поле длиной 200. Кодировка таблицы - cp1251, колейт - cp1251_general_ci. Ввожу строку на русском в билдере - получаю ошибку о том что строка слишком длинная (хотя по факту там одно слово). С английским проблем не возникает. Меняю кодировку и колейт на латин - все работает для обоих языков. Как это обьяснить?
Заранее спасибо за любой ответ

   
 
 автор: cheops   (06.12.2006 в 21:02)   письмо автору
 
   для: meskallito   (06.12.2006 в 19:33)
 

Сразу после того как устанавливаете соединение с базой данных, выполняйте запрос
SET NAMES 'cp1251'

который установит кодировку соединения. Возможно вас также заинтересует статья http://www.st-host.ru/help/index.php?id_article=14, где этот вопрос рассматривается более подробно.

   
 
 автор: meskallito   (08.12.2006 в 16:10)   письмо автору
 
   для: cheops   (06.12.2006 в 21:02)
 

Спасибо, с этим вроде разобрался.
Теперь другой вопрос. Делаю запрос к базе в ADOQuery, выдает такую ошибку:
Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='
Запрос формируется динамически, но если его прописать вручную в свойствах ADOQuery, то работает без проблем. В чем может быть проблема?

   
 
 автор: cheops   (08.12.2006 в 20:41)   письмо автору
 
   для: meskallito   (08.12.2006 в 16:10)
 

Таблицы и столбцы в ней должны иметь кодировку по умолчанию cp1251, а не latin1.

   
 
 автор: meskallito   (08.12.2006 в 22:54)   письмо автору
 
   для: cheops   (08.12.2006 в 20:41)
 

В том то и дело что и для базы и для таблиц и для колонок кодировка прописана как ср1251. Может это чето билдеровское. Этот же запрос нормально работает если ввести его вручную.

   
 
 автор: cheops   (09.12.2006 в 00:07)   письмо автору
 
   для: meskallito   (08.12.2006 в 22:54)
 

Хм... приведите пожалуйста запрос, который приводит к этой ошибке?

   
 
 автор: meskallito   (09.12.2006 в 00:13)   письмо автору
 
   для: cheops   (09.12.2006 в 00:07)
 

SELECT * FROM books_fund WHERE section in (SELECT section_id FROM sections WHERE section_name IN (
'Раздел 1','Раздел 2'
) );

   
 
 автор: meskallito   (09.12.2006 в 02:04)   письмо автору
 
   для: cheops   (09.12.2006 в 00:07)
 

Только что заметил, что помогает та же строчка, которую вы мне дали в первом посте. Прямо перед открытием ADOQuery. Неужто прийдетса ее везде тыкать :)

   
 
 автор: meskallito   (09.12.2006 в 02:25)   письмо автору
 
   для: meskallito   (09.12.2006 в 02:04)
 

Рано радовался. Ошибок нет, но результата запроса тоже. Кошмар :(

   
 
 автор: cheops   (09.12.2006 в 13:46)   письмо автору
 
   для: meskallito   (09.12.2006 в 02:04)
 

Эта строка должна по идеи втыкаться после каждого соединения с сервером базы данных. А у вас для таблиц по умолчанию кодировка cp1251 или latin1 выставлена? Нужно чтобы везде было установлено cp1251.

   
 
 автор: meskallito   (09.12.2006 в 16:33)   письмо автору
 
   для: cheops   (09.12.2006 в 13:46)
 

По умолчанию cp1251. Заметил такую особенность. Вот есть участок кода который засовывает запрос в ADOQuery и активирует его. Так вот первый раз при старте программы этот участок кода проходит нормально, результаты запроса видны на экране. А если вызывать его чуть позже кнопкой, то получаю ошибку. Для соединения стоит галочка KeepConnected. Если ее убрать и устанавливать каждый раз новое соединение перед этим участком (вместе с set names), то первый раз все ок, как обычно, а дальше я получаю ровным счетом ничего. Не ошибок не результатов запроса.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования