Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

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

 

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

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

тема: Кодировка и SELECT ... WHERE ...
 
 автор: codexomega   (22.08.2005 в 04:32)   письмо автору
 
 

Здравствуйте.
У меня страница отображающая список записей из BD.
При загрузке страницы все работает отлично, я вижу русский текст в кодировке koi8-r. На той же странице, у меня есть combo-box для отображения списка данных по выбранной категории. Формуляр работает, запрос SQL тоже, но проблема в том что база данных не правильно понимает кодировку параметра введеного в условие WHERE и в результате ничего не показывает, как будто данное слово не найдено.

Вот небольшой кусочек кода:

-----------------------------------------------

$link = mysql_connect ($server,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());
//setting encoding for results to cyrillic windows
mysql_query ("set character_set_client='koi8r'"); 
mysql_query ("set character_set_results='koi8r'"); 
mysql_query ("set collation_connection='koi8r_general_ci'"); 
//=========================================
// SQL
//=========================================
//get bookmark_category
if(isset($_POST[bookmark_category']))
     $bookmark_category = $_POST[bookmark_category'];
else
    $bookmark_category = "";
//making query
if (empty($bookmark_category))
    $select = 'SELECT * FROM bookmarks ORDER BY Bookmark_Category ASC';
else
    $select = "SELECT * FROM bookmarks WHERE Bookmark_Category = ' ".$bookmark_category."'";
//echo $select;
$result = mysql_query($select)  or die ('Erreur : '.mysql_error() );
mysql_close();

   
 
 автор: OZ_   (22.08.2005 в 09:52)   письмо автору
 
   для: codexomega   (22.08.2005 в 04:32)
 

Попробуй перед внесением записи в базу кодировать её (iconv) в koi-8, чтоб уж наверняка. Я так делал (и тему тут создавал).

   
 
 автор: cheops   (22.08.2005 в 13:16)   письмо автору
 
   для: codexomega   (22.08.2005 в 04:32)
 

Таблица в koi8-r? А в какой кодировки попадает информация в базу данных со страницы в запрос?

   
 
 автор: codexomega   (22.08.2005 в 19:37)   письмо автору
 
   для: codexomega   (22.08.2005 в 04:32)
 

Вот характеристики БД:

- Версия: 4.1.13
- MySQL charset: UTF-8 Unicode (utf8)
- MySQL connection collation: utf8_unicode_ci

Таблицы в кодировке: utf8_unicode_ci

Но это сейчас я исправил и этим наверное все попортил, так-как теперь на странице вместо кириллицы, у меня отображаются иероглифы.
А до этого, поля в таблицах были в кодировке: utf8_unicode_ci, а сами таблицы, в кодировке latin_swedish. Чепуха короче какая-то.
Тем не менее все работало, а теперь - нет.
Конвертор кодировки который я использовал раньше для отображения результатов на странице при кодировке koi8-r:

mysql_query ("set character_set_client='koi8r'"); 
mysql_query ("set character_set_results='koi8r'"); 
mysql_query ("set collation_connection='koi8r_general_ci'");

Теперь тоже не работает.

Подксажите пожауйста с какими кодирвками вообще работать для таблиц с кириллицей.

И еще, я не знаю как трансформировать кодировку запроса при отправлении со страницы в базу, нашел вот это: $field = iconv("koi8-r", "utf-8", $field);
Но не уверен.

Заранее спасибо.

   
 
 автор: codexomega   (22.08.2005 в 19:58)   письмо автору
 
   для: codexomega   (22.08.2005 в 19:37)
 

На странице теперь нормальная кириллица, это у меня код был закоментирован :)
Но те же вопросы остаются:
Какую кодировку вообще использовать при создани баз и таблиц с кириллицей?
Как конвертировать данные при отправке их со страницы в базу?
Еще раз спасибо.

   
 
 автор: cheops   (22.08.2005 в 20:58)   письмо автору
 
   для: codexomega   (22.08.2005 в 19:37)
 

Работать следует в кодировке, которая вам удобнее, если вам удобно работать с KOI8-R с ней и следует работать, если вы больше предпочитаете cp1251 следует ориентироваться на неё. Если у вас нет обширной базы с русским текстом, то можно ориентироваться и на UTF-8.

Лучше iconv сейчас ничего не найдёте тем более для работы с utf-8.

   
 
 автор: codexomega   (23.08.2005 в 01:44)   письмо автору
 
   для: cheops   (22.08.2005 в 20:58)
 

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


$select = "SELECT * FROM bookmarks WHERE Bookmark_Category  =  ' ".iconv("koi8-r", "utf-8", $bookmark_category)."'";


Т.е конвертирую текст по теории из koi8-r в utf-8 при запросе.
Странно, но результат не находится.
Что делать?

   
 
 автор: cheops   (23.08.2005 в 02:03)   письмо автору
 
   для: codexomega   (23.08.2005 в 01:44)
 

Вы на локальном хосте тестируете или на сервере?

   
 
 автор: codexomega   (23.08.2005 в 02:05)   письмо автору
 
   для: cheops   (23.08.2005 в 02:03)
 

на локальном

   
 
 автор: cheops   (23.08.2005 в 02:09)   письмо автору
 
   для: codexomega   (23.08.2005 в 02:05)
 

А при установке сервера, вы по умолчанию какую кодировку выбирали в утилите MySQL Server Instance Config Wizard?

   
 
 автор: codexomega   (23.08.2005 в 02:50)   письмо автору
 
   для: codexomega   (22.08.2005 в 19:37)
 

Огромное спасибо за помощь.
У меня всё работает. УРА!!!
Мне даже не понадобилась перекодиовка данных с koi8-r в utf-8.
Ошибка была моей. Небольшая, маленькая, чисто случайно заметил.
Дело в том что мой параметр поиска отправлялся таким образом:

SELECT * FROM bookmarks WHERE Bookmark_Category = ' my_parameter'.

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

Ну вот и все.

   
Rambler's Top100
вверх

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