Несовместимости версий MySql
А работаю с MySql с версии 3.22, если мне не изменяет память. А сейчас на дворе уже 5.1.14-beta. Работаю не много но регулярно.
Для себя я разделяю MySql на следующие версии:
< 3.22 - лучше не трогать, я их не помню. 3.X - хорошая, быстрая, без запар с кодировками. 4.0.X - быстрая, запары с кодировками уже начались. 4.1.X - на сегодняшний день это моя версия. Запары с кодировками присутствуют. Стала поувесистей. 5.0.X - это уже не тот MySql с которым я хорошо знаком. Тут есть и транзакции и триггеры и прочие атрибуты нормальных реляционных СУБД. Эдакий недооракл. 5.1.X - пока лучше не трогать. Я даже не смотрел.
А хочу сказать я лишь одно — быстрой миграции между этими ветками не получится, даже не думайте. Сделайте все не торопясь и вдумчиво.
Про несовместимости с кодировками я даже писать не буду. Тысячи программистов видели знаки вопросов вместо русских букв.
Я раскажу о несовместимостях, на которые нарвался буквально сегодня:
Это работает в MySql 4.1, но не работает в более ранних версиях:
SELECT SUBSTR(filed,5) FROM table
правильно, потому что в старых версиях не было синонима SUBSTR() для функции SUBSTRING(). Вот так работает во всех версиях:
SELECT SUBSTRING(filed,5) FROM table
Это классическая обратная несовместимость, и ничего ненормального в ней нет. Но есть и прямые несовместимости, например в MySql. 5.0.27 следующий запрос может вызывать ошибку:
INSERT INTO table SET field='';
если поле field не является текстовым, а например INT. В предыдущих версиях MySql молча туда вписывал «0».
Запрос
INSERT INTO table SET field='1234567890';
в версии 5.0.27 тоже вызовет ошибку «слишком длинная строка», если максимальная длина поля field менее 10 символов, например VARCHAR[5]. Наверняка можно встретить подобные ошибки при переполнении в числовых полях, но я не проверял этого.
Эти ошибки связаны с режимами SQL, которые появились еще в версии 4.1. Но только в дистрибутиве 5.0.27, который меня угораздило использовать, по умолчанию был включен режим «TRADITIONAL».
Примечания: все испытываемые MySql сервера имели настройки по умолчанию.
Комментарии