Forum Webscript.Ru

Общие => Базы данных => Тема начата: Crazy Scientist от 10 Мая 2002, 23:05:54

Название: Ещё раз про сортировку кириллицы и как с этим бороться.
Отправлено: Crazy Scientist от 10 Мая 2002, 23:05:54
Проблема в том, что у провайдера для 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 от 19 Мая 2002, 01:18:37
ALTER TABLE `mytable` CHANGE `rusname` `rusname` VARCHAR(30) BINARY NOT NULL

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

Выходит, что VARCHAR (N) BINARY и FULLTEXT index - примерно как гений и злодейство.
Название: Ещё раз про сортировку кириллицы и как с этим бороться.
Отправлено: fidget от 19 Мая 2002, 13:03:30
Цитировать
Выходит, что VARCHAR (N) BINARY и FULLTEXT index - примерно как гений и злодейство.


FULLTEXT index ты можешь создать только на поля объявленные как VARCHAR() или TEXT, т.е. на текстовые поля
если ты объявишь VARCHAR() как BINARY, то это уже получится своего рода BLOB поле, а на BLOB FULLTEXT index не создается.
Название: Ещё раз про сортировку кириллицы и как с этим бороться.
Отправлено: ilanva от 21 Мая 2002, 18:17:30
Не плохо..., проблема с сортировкой при использовании свойства binary для char (varchar) полей отпадает.

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

Можно как-нибудь это побороть?
Название: Ещё раз про сортировку кириллицы и как с этим бороться.
Отправлено: fidget от 21 Мая 2002, 18:28:02
Цитировать
Можно как-нибудь это побороть?

недавно обсуждалось ..
http://forums.webscript.ru/showthread.php?s=&threadid=5767
Название: Ещё раз про сортировку кириллицы и как с этим бороться.
Отправлено: ilanva от 21 Мая 2002, 18:39:57
Читал, читал.
Но в этом весь прикол...
Не работает так.
Только по регистру :(
Название: Ещё раз про сортировку кириллицы и как с этим бороться.
Отправлено: fidget от 21 Мая 2002, 19:07:41
что именно не работает?

Если у тебя данные определены как binary, то они уже чувствительны к регистру. Т.е. тебе для их нахождения все нужно свести к одному регистру. И что у тебя сдесь не работает?
Название: Ещё раз про сортировку кириллицы и как с этим бороться.
Отправлено: ilanva от 22 Мая 2002, 10:02:54
К примеру:
select * from table where lower(name) like lower(\'%$query%\')
результат тот же, что и без lower :(
Название: Ещё раз про сортировку кириллицы и как с этим бороться.
Отправлено: fidget от 22 Мая 2002, 10:12:23
Проверяй чему у тебя равно $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 от 22 Мая 2002, 10:24:24
А chset в этом примере binary или нет?
Название: Ещё раз про сортировку кириллицы и как с этим бороться.
Отправлено: fidget от 22 Мая 2002, 13:46:30
Да!
mysql> desc chset;
+-------+--------------------+------+-----+---------+-------+
| Field | Type               | Null | Key | Default | Extra |
+-------+--------------------+------+-----+---------+-------+
| name  | varchar(15) binary | YES  |     | NULL    |       |
+-------+--------------------+------+-----+---------+-------+
1 row in set (0.00 sec)
Название: Ещё раз про сортировку кириллицы и как с этим бороться.
Отправлено: Crazy Scientist от 24 Мая 2002, 17:53:05
А вот что-то не въеду - как сделать тогда, чтобы сортировка шла не АБВГД.... абвгд...., а АаБбВвГгДд..... ?