Автор Тема: Ещё раз про сортировку кириллицы и как с этим бороться.  (Прочитано 4876 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Crazy Scientist

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема в том, что у провайдера для MySQL прописана latin1 и менять он её не собирается. А сортировать всё равно хочется по русскому алфавиту. Какие есть варианты решения проблемы?
Пробовал сделать
ALTER TABLE `mytable` CHANGE `rusname` `rusname` VARCHAR(30) BINARY NOT NULL

ответ MySQL:
Can\'t create table \'./dbname/#sql-af_adcce.frm\' (errno: 140)

Оффлайн Crazy Scientist

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
ALTER TABLE `mytable` CHANGE `rusname` `rusname` VARCHAR(30) BINARY NOT NULL

Запрос не работал, так как был создан полнотекстовой индекс для поля типа TEXT. После удаления индекса тип поля поменялся. Но теперь, к сожалению, нельзя использовать возможность FULLTEXT поиска.

Выходит, что VARCHAR (N) BINARY и FULLTEXT index - примерно как гений и злодейство.

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Цитировать
Выходит, что VARCHAR (N) BINARY и FULLTEXT index - примерно как гений и злодейство.


FULLTEXT index ты можешь создать только на поля объявленные как VARCHAR() или TEXT, т.е. на текстовые поля
если ты объявишь VARCHAR() как BINARY, то это уже получится своего рода BLOB поле, а на BLOB FULLTEXT index не создается.
На Машине Тьюринга далеко не уедешь.

Оффлайн ilanva

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 14
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Не плохо..., проблема с сортировкой при использовании свойства binary для char (varchar) полей отпадает.

При этом возникает другая.
При поиске и использовании LIKE (как известно эта директива не должна обращать внимание на регистр символов) учитывается регистр. :(

Можно как-нибудь это побороть?

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Цитировать
Можно как-нибудь это побороть?

недавно обсуждалось ..
http://forums.webscript.ru/showthread.php?s=&threadid=5767
На Машине Тьюринга далеко не уедешь.

Оффлайн ilanva

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 14
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Читал, читал.
Но в этом весь прикол...
Не работает так.
Только по регистру :(

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
что именно не работает?

Если у тебя данные определены как binary, то они уже чувствительны к регистру. Т.е. тебе для их нахождения все нужно свести к одному регистру. И что у тебя сдесь не работает?
На Машине Тьюринга далеко не уедешь.

Оффлайн ilanva

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 14
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
К примеру:
select * from table where lower(name) like lower(\'%$query%\')
результат тот же, что и без lower :(

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Проверяй чему у тебя равно $query, должно работать ...
Смотри
mysql> insert into chset values
    -> (\'WebScRipt\'),
    -> (\'webscript\'),
    -> (\'websCRIPT\'),
    -> (\'WEBSCRIPT\');
Query OK, 4 rows affected (0.02 sec)

mysql> select * from chset where lower(name) like lower(\'%ScR%\');
+-----------+
| name      |
+-----------+
| WebScRipt |
| webscript |
| websCRIPT |
| WEBSCRIPT |
+-----------+
4 rows in set (0.00 sec)
Все работает :)
На Машине Тьюринга далеко не уедешь.

Оффлайн ilanva

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 14
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
А chset в этом примере binary или нет?

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Да!
mysql> desc chset;
+-------+--------------------+------+-----+---------+-------+
| Field | Type               | Null | Key | Default | Extra |
+-------+--------------------+------+-----+---------+-------+
| name  | varchar(15) binary | YES  |     | NULL    |       |
+-------+--------------------+------+-----+---------+-------+
1 row in set (0.00 sec)
На Машине Тьюринга далеко не уедешь.

Оффлайн Crazy Scientist

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
А вот что-то не въеду - как сделать тогда, чтобы сортировка шла не АБВГД.... абвгд...., а АаБбВвГгДд..... ?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28