Forum Webscript.Ru
Общие => Базы данных => Тема начата: 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)
-
ALTER TABLE `mytable` CHANGE `rusname` `rusname` VARCHAR(30) BINARY NOT NULL
Запрос не работал, так как был создан полнотекстовой индекс для поля типа TEXT. После удаления индекса тип поля поменялся. Но теперь, к сожалению, нельзя использовать возможность FULLTEXT поиска.
Выходит, что VARCHAR (N) BINARY и FULLTEXT index - примерно как гений и злодейство.
-
Выходит, что VARCHAR (N) BINARY и FULLTEXT index - примерно как гений и злодейство.
FULLTEXT index ты можешь создать только на поля объявленные как VARCHAR() или TEXT, т.е. на текстовые поля
если ты объявишь VARCHAR() как BINARY, то это уже получится своего рода BLOB поле, а на BLOB FULLTEXT index не создается.
-
Не плохо..., проблема с сортировкой при использовании свойства binary для char (varchar) полей отпадает.
При этом возникает другая.
При поиске и использовании LIKE (как известно эта директива не должна обращать внимание на регистр символов) учитывается регистр. :(
Можно как-нибудь это побороть?
-
Можно как-нибудь это побороть?
недавно обсуждалось ..
http://forums.webscript.ru/showthread.php?s=&threadid=5767
-
Читал, читал.
Но в этом весь прикол...
Не работает так.
Только по регистру :(
-
что именно не работает?
Если у тебя данные определены как binary, то они уже чувствительны к регистру. Т.е. тебе для их нахождения все нужно свести к одному регистру. И что у тебя сдесь не работает?
-
К примеру:
select * from table where lower(name) like lower(\'%$query%\')
результат тот же, что и без lower :(
-
Проверяй чему у тебя равно $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)
Все работает :)
-
А chset в этом примере binary или нет?
-
Да!
mysql> desc chset;
+-------+--------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------------+------+-----+---------+-------+
| name | varchar(15) binary | YES | | NULL | |
+-------+--------------------+------+-----+---------+-------+
1 row in set (0.00 sec)
-
А вот что-то не въеду - как сделать тогда, чтобы сортировка шла не АБВГД.... абвгд...., а АаБбВвГгДд..... ?