Неправильно работают поиск и сортировка

Agatov

Новичок
Неправильно работают поиск и сортировка

Проблема следующая. Был выполнен экспорт базы из Аксесса в Мускл. Экспортировал так:

1) Сначала данные из аксесса слил в текстовой файл
2) Самописной функцией пропарсил файл, выбирая нужные данные и вставляя их в соответствующие поля в mysql

Теперь запрос типа "select * from table order by name" выдаёт спонтанный результат (ответ отсортирован по алфавиту, но очень много "неправильных" строк, Например после "А" может идти запись на "я", за ней опять 20 записей на "а", а потом несколько записей на "к" после которой следуют записи на "Б".


С поиском та же проблема. Запрос: "select * from table where name like '%BBC%' " выводит все записи с вхождением "BBC" в "name" но проскакивает много левых записей, где в поле "name" нет даже отдельных символов "В" и "С"...


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


Впервые сталкиваюсь с подобным.
 

Agatov

Новичок
Автор оригинала: phprus
Agatov
FAQ читать будем? Я очень подозреваю, что все твои беды из-за того что ты не прочитал статью: http://phpclub.ru/faq/wakka.php?wakka=Mysql41Rus&v=1c63
Фак на эту тему читал уже давно, но всё равно спасибо за напоминание. Честно говоря, я этот вариант уже рассматривал, т.к. другая причина маловероятна. Но толку с этого было немного - сортировка была такая же корявая.


Мож просто не ту кодировку использовал? Как подобрать правильную в таком случае? ведь их о-го-го сколько
 

baev

‹°°¬•
Команда форума
Как подобрать правильную в таком случае? ведь их о-го-го сколько
— сколько?

Если не осенит, действуйте методом исключения: вот японские иероглифы, например, Вам ведь врядли подойдут?
 

Sufir

Я не волшебник, я только учусь
Кодировку выбирай сам, какая нужна, разницы в общем то нет (ну конечно Японская EUC-JP тебе вряд ли подойдет).
Например cp1251 или utf8.
Создавай таблицы в выбранной кодировке:
PHP:
CREATE TABLE Table (id INT(11) AUTO_INCREMENT,
			xx VARCHAR(11),
			yy TIMESTAMP(14),
			FULLTEXT (xx))
			TYPE=MyISAM CHARACTER SET cp1251 COLLATE cp1251_general_ci;
/*character_set_client cp1251
character_set_connection cp1251
character_set_database cp1251
character_set_results cp1251
character_set_server cp1251
character_set_system cp1251*/
Заливай данные в выбранной кодировке(!) и соединение при заливке должно быть в выбранной кодировке(!) и при получении из базы данных соединение должно быть в выбранной кодировке(!) и запрос отправляться в выбранной кодировке(!).
Для этого используй запрос SET NAMES utf8 сразу после соединения с базой.

PHP:
//переменная $xx должна быть в кодировке cp1251, если нет то конвертируй
$xx = mb_convert_encoding($xx, "cp1251", "UTF-8");
//добавление данных
SET NAMES cp1251;
INSERT INTO Table SET xx=$xx;
//получение
SET NAMES cp1251;
SELECT * FROM Table WHERE xx=$xx;
 
Сверху