Нарушена сортировка по-русски

Помогите, пожалуйста, кто сталкивался!

В магазинах нарушена правильная (по алфавиту) сортировка при запросах к БД.  Вот пример на тестовом сайте: здесь.  Товары на букву А находятся совсем не на первых страницах. Все товары на букву А располагаются после Ш. а, товары на Ц лежат сразу после товаров на букву Д. А товары на Ш ушли вверх.

Магазин использует кодировку cp1251, а в БД mySQL символы хранятся в  KOI8-R.   

Что можно сделать для исправления нарушенного порядка сортировки?

Нужно привести все к одной кодировке - тогда все встанет на свои места

Вся-то сложность и была, чтобы найти где и как это сделать для конкретного магазина. 

Если кому понадобится, то получилось так.  Это все настраивалось для сборок VAM 215 и, видимо ниже, и если у хостера хранение символьных данных в БД осуществляется в KOI8-R.

Заходим в phpMyAdmin, видим на первой странице:

MySQL-кодировка: KOI8-R Relcom Russian (koi8r)

Ниже выставляем:
Сопоставление соединения с MySQL:  cp1251_general_ci

Входим в нужную БД, далее в Операции и внизу страницы меняем KOI8-R на  cp1251_general_ci и нажимаем кнопку.

Делаем бэкап через Инструменты в Админке без сжатия.  Далее открываем файл .sql в "правильном" текcтовом редакторе ( у нас HTML Pad ) и меняем DEFAULT CHARSET=KOI8-R  на DEFAULT CHARSET=cp1251  во всех случаях.

Загружаем новый файл и делаем восстановление БД через Инструменты в Админке.

Далее в дух файлах (имеется в виду сборки VAM до 216 версии - т.к. начиная с нее все уже в UTF8):
/admin/includes/functionsdatabase.php и
/includes/functionsdatabase.php

расскоментируем строчку с "SET NAMES 'cp1251'":

  @mysql_select_db($database);
  @mysql_query("SET SQL_MODE= ''");
//@mysql_query("SET NAMES 'cp1251'");

НУ И ПОКА все вроде работает.

Поделитесь опытом у кого были такие проблемы, и как вы решали.

*

Spido

  • *
  • 1634

если у хостера хранение символьных данных в БД осуществляется в KOI8-R.
Поделитесь опытом у кого были такие проблемы, и как вы решали.

Такие хостеры либо бесплатные либо полные пофигисты.
У таких лучше не хоститься, тогда и не будет подобных проблем.
Уже лет 6, как в русском OSC локаль переделали на windows-1251 и базы у хостеров работают на cp1251 столько же лет.
Уже все переходят на UTF-8, а ваш хостер сильно отстал от поезда.

Если вам помогли, то не стесняйтесь отблагодарить донатом:

Согласен по поводу хостера.  Долго переписывался с ними, просил, намекал - но у них как есть шаблон для создания виртуального сервера с БД, так они его и используют.  Такое ощущение, что есть один упертый администратор, который не хочет напрягаться с новыми установками и все - полный стопор.  Зато могут долго объяснять, что все можно сделать.  И когда я а них начал наезжать с примерами такого магазина на других хостингах с правильной сортировкой, то они просто создали пример, где у них все было правильно и работало на KOI8-R в БД.  Подсказали, что надо искать причину в mysql_query("SET NAMES ..... COLLATE ......."); Формально они правы, но когда никогда не сталкивался с такими проблемами, выстроить всю эту цепочку  изменений в нужных файлах и т.п.  чтобы все сработало - бывает мучительно долго.

Всем, кто откликнулся, спасибо.