При переходе с MySQL версии 3.23.* на MySQL версии 4.0.* происходят некоторые изменения в работе сервера, что может отрицательно сказаться на работоспособности сайта.
Рекомендуем ознакомиться с полным списком изменений и принять соответствующие меры.
Полный список изменений и рекомендации по миграции на версию 4.0.* можно найти по адресам:
http://www.mysql.com/doc/ru/
http://www.mysql.com/doc/en/
Краткий список изменений:
- Для того чтобы использовать MATCH … AGAINST (… IN BOOLEAN MODE) на таблицах, следует перестроить их заново при помощи REPAIR TABLE table_name USE_FRM.
- В версии 3.23.* в команде INSERT INTO … SELECT параметр IGNORE всегда был разрешен. В версии 4.0.* MySQL остановится (и, возможно, произойдет откат) в случае ошибки, если IGNORE не задан явно.
- Столбцы DOUBLE и FLOAT теперь учитывают флаг UNSIGNED при хранении (раньше UNSIGNED игнорировался для этих столбцов)
- HEX(string) сейчас возвращает символы строки, преобразованные в шестнадцатеричные. Если необходимо преобразовать число в шестнадцатеричное представление, убедитесь, что HEX() вызывается с числовым аргументом.
- Результат работы всех поразрядных операторов |, &, <<, >> и ~ сейчас является беззнаковым. Это может вызвать проблемы при использовании их в контексте, где желателен результат со знаком.
- CHECK, SIGNED, LOCALTIME и LOCALTIMESTAMP теперь являются зарезервированными словами.
- В версии 4.0.* RAND(seed) возвращает иные последовательности случайных чисел, чем в 3.23.*; это сделано для того, чтобы лучше различать RAND(seed) и RAND(seed+1).
- Тип результата, возвращаемый IFNULL(A,B) теперь по умолчанию устанавливается более «общий» по отношению к типам A и B. Порядок выбора — STRING, REAL или INTEGER.
- LOCATE() и INSTR() чувствительны к регистру, если один из аргументов является двоичной строкой. В противном случае они не зависят от регистра.
- STRCMP() при выполнении сравнений сейчас использует текущий набор символов; это означает, что операция сравнения по умолчанию начиная с данной версии является независимой от регистра.

