Несовместимости версий MySql

Несовместимости версий MySql

Несовместимости версий 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 сервера имели настройки по умолчанию.

Комментарии