логин: 
<< предыдущая заметкаследующая заметка >>
19 августа 2011
MySQL - прошу помощи зала (а особенно Ольги)

Ситуация. Устанавливаю движок одному товарищу. Ну, у каждого хостинга свои погремушки. Всего каких-то час-полтора мне потребовалось, чтобы дистанционно понять, что там PHP версии 4, где нету команды str_ireplace, и глухо и безответно движок виснет именно поэтому. Это я поправил.

Дальше проблемы начались с MySQL, которая оказалась тоже старинной версии. Ну, CHARSET она не понимает.

1. Пришлось убрать вообще:
'default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP'
и просто 'default CURRENT_TIMESTAMP'

2. Пришлось убрать 'DEFAULT CHARSET=cp1251'

3. Дальше следите за руками:

CREATE TABLE IF NOT EXISTS `dnevnik_search` (
`n` bigint(20) NOT NULL auto_increment,
`link` varchar(2048) NOT NULL,
PRIMARY KEY (`n`),
KEY `link` (`link`(1000))
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='поисковые заходы' AUTO_INCREMENT=0 ;

Too big column length for column 'link' (max = 255). Use BLOB instead

Ну и на что я заменю link длиной 2048? Что такое BLOB? Х.з. Ну я поставил вместо него TEXT. Правильно? Нет?

CREATE TABLE IF NOT EXISTS `dnevnik_search` (
`n` bigint(20) NOT NULL auto_increment,
`link` TEXT NOT NULL,
PRIMARY KEY (`n`),
KEY `link` (`link`(1000))
) ENGINE=MyISAM COMMENT='поисковые заходы' AUTO_INCREMENT=0 ;

Incorrect sub part key. The used key part isn't a string, the used length is longer than the key part or the table handler doesn't support unique sub keys

Интересное дело. Ладно, попробуем убрать (1000):

CREATE TABLE IF NOT EXISTS `dnevnik_search` (
`n` bigint(20) NOT NULL auto_increment,
`link` TEXT NOT NULL,
PRIMARY KEY (`n`),
KEY `link` (`link`)
) ENGINE=MyISAM COMMENT='поисковые заходы' AUTO_INCREMENT=0 ;

BLOB column 'link' used in key specification without a key length

Ну и чего дальше? Идеи закончились. Как быть?


UPD: Нашел такое решение: PRIMARY KEY (`n`), FULLTEXT (`link`) Вроде таблица создалась. В этом есть что-то неправильное? Можно было сделать лучше?

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий
Windows Firefox
0
0
zencd
BLOB - большой бинарный объект; в таких только фотки хранить. TEXT уместнее в данной ситуации.
Windows Opera
0
0
[email protected] (wott.info)
3. BLOB это поле для бинарных данных &lt;=64К
TEXT для линка в этом случае правильно

С ключами на TEXT есть одна тонкость с уникальностью, но поскольку тут она вроде не нужна, то
KEY link (link(255))
будет правильно
FULLTEXT - это совсем из другой оперы
Windows Opera
1
0
[email protected] (wott.info)
научитесь уже корректно работать с больше меньше и так далее по списку, а то ругается на html теги, что в общем-то глупо - надо просто аккуратно экранировать/заменять и показывать что написали
Windows Firefox
1
0
zencd
А в чём была задумка строить индекс по полю link? Сортировать по нему? Или производить в нём поиск?

Если первое, то нужно продолжать использовать KEY `link`, но вы встретите (и уже встретили) ограничение на кол-во символов в колонке (стоит задуматься, а так ли оно нужно). Если же нужно производить там текстовый поиск, то нужно что-то вроде как раз этого FULLTEXT - как минимум, направление верное.
Windows Firefox
1
0
А у товарища точно нет возможности обновиться?
Windows Safari Chrome
 Австралия
1
0
Я сильно польщена, но увы, не оправдаю ваших надежд. В новых версиях MySQL мне ориентироваться достаточно легко потому что это ближе к Oracle, и у них просто офигенная документированная поддержка и community. Чтоб мне разобраться в конкретной старой версии, её надо сначала найти, со всей документацией. Вот например, по версиям 3.23, 4.0 и 4.1 документация частично ещё доступна в сети, хоть её и обещали убрать в конце 2010.
Судя по этой документации, FULLTEXT индекс на TEXT поле - это правильно, для этого оно и было придумано:
###
As of MySQL 3.23.23, MySQL has support for full-text indexing and searching:
A full-text index in MySQL is an index of type FULLTEXT.
...
###
На деле проверить не могу, к сожалению, и практического опыта со старыми версиями у меня нет :(..
Согласна с quantum: обновить бы базу если нет какого сильного довода против, и не маяться больше.
Windows Firefox
1
0
Руслан (#1070714)
В принципе ничего должно произойти.Леонид а вы не хотите опубливовать АПИ для стэнд-алонов (wordpress,самописные) для подключения к Бинонику?
Windows IE
2
0
Alex (#403057)
Я тот самый товарищ. На тему обновить MySQL -- могу поспрашивать у провайдера. Лео, стоит это делать, или ты ещё хочешь с текущей версией поразбираться?
Nokia-E90 Safari
 Москва
1
0
LLeo Nokia E90 (#1115531)
Алекс, не надо, все уже работает.
Не работает обновление нового инсталла - но это видимо опять в РНР какую-то функцию отключили, интересно будет узнать какую и поставить заплатку.
Если еще что-то не работает - пиши.
Windows IE
0
0
Alex (#403057)
В самом движке много чего не работает. Вот, навскидку: нажатие линк "моё непрочитанное" генерирует ошибку:
mysql_query("SELECT `Access`,`Date`,`Header` FROM `dnevnik_zapisi` as d WHERE `DateDate`>'1311178928' AND NOT EXISTS (SELECT `url` FROM `dnevnik_posetil` AS p WHERE `unic`='3' AND d.`num`=p.`url`) ORDER BY `Date` DESC")
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXISTS (SELECT `url` FROM `dnevnik_posetil` AS p WHERE `unic`='
Linux Firefox
 Москва
0
0
Ага... Похоже, старый MySQL не понимал сложных запросов. Как это править - пока не знаю.

Я бы посоветовал недельку понаблюдать, что именно не работает. А потом написать в техподдержку, что они охренели такой старый софт держать. Может, у них еще и сервера под Windows-98 работают? ;)
Связался с хостером, тот обновил софт. Кое-что заработало, что раньше не работало, но теперь в постингах весь русский текст показывается вопросительными знаками. Это где-то базу как-то настраивать надо?
Nokia-E90 Safari
 Москва
0
0
LLeo Nokia E90 (#1125069)
Ой как зря. Все же работало и было приведено в норму средствами движка, а теперь мы потеряли такой любопытный экземпляр для экспериментов. А взамен обрели неизестные проблемы, решение которых ничего не дает для развития движка :)

Впрочем, решение тут очевидно: зайти в /install (не install.php) и убить там все таблицы. А затем в нем же (если не получится - то в /admin) создать их заново. Уже с чарсетом они создадутся.
Windows Safari Chrome
0
0
Globe (#1041348)
Здрасьте. Так ты же сам сказал "а потом написать в техподдержку, что они охренели такой старый софт держать".

И потом вовсе не "всё работало", я же приводил пример того, что не работает.

PS Почему-то в Google Chrome меня твой блог называет "Globe".
Windows Firefox
0
0
murrmax (#417977)
пц. ну кто так делает.
уж если хочется загнать всю инсталляцию в один SQL скрипт, используйте прагмы.
http://dev.mysql.com/doc/refman/5.1/en/comments.html
например:
CREATE /*!32302 TEMPORARY */ TABLE t (a INT)
то, что под комментом - будет исполняться только для mysql версии больше или равно 3.23.02

а вообще вопрос "ну кто так делает" - он сцуко актуален. на фига иметь полнотекстовый индекс на блобе, который заполняется напрямую с веба - чтобы вас через это задосили?

всего комментариев: 15

<< предыдущая заметка следующая заметка >>