поддерживаются таблицы нового типа
В версии MySQL 3. 23 поддерживаются таблицы нового типа MyISAM и старого типа ISAM. Старые таблицы не нуждаются в преобразовании для использования их в версии 3.23. По умолчанию все новые таблицы будут создаваться с типом MyISAM (если вы не запускаете mysqld с опцией --default-table-type=isam). Можно преобразовать таблицу ISAM в таблицу MyISAM при помощи команды ALTER TABLE table_name TYPE=MyISAM или при помощи Perl-скрипта mysql_convert_table_format.
Клиенты версий 3.22 и 3.21 должны работать с сервером версии 3.23 без каких-либо проблем.
Ниже перечислены моменты, на которые следует обратить внимание при модернизации до версии 3.23:
Все таблицы, в которых используется кодировка tis620, должны быть исправлены с помощью myisamchk -r или REPAIR TABLE.
При выполнении команды DROP DATABASE над базой данных, связанной символической ссылкой, удаляются как данная ссылка, так и исходная база данных (в 3.22 это было не так, поскольку программа configure не распознавала системный вызов readlink).
OPTIMIZE TABLE сейчас работает только с таблицами MyISAM. Для других типов таблиц можно использовать команду ALTER TABLE для оптимизации таблицы. Во время выполнения команды OPTIMIZE TABLE оптимизируемая таблица сейчас заблокирована для других потоков.
Клиент mysql сервера MySQL сейчас по умолчанию начинает свою работу с опцией --no-named-commands (-g). Данную опцию можно отключить с помощью --enable-named-commands (-G). В некоторых случаях это может вызывать проблемы несовместимости, например, в скриптах SQL, в которых названные команды используются без точки с запятой! Команды большого формата пока еще работают с начала строки.
Функции даты, работающие с частью представления даты (такие как MONTH()), сейчас будут возвращать 0 для даты 0000-00-00 (в версии MySQL 3.22 возвращалась величина NULL).
При использовании порядка сортировки символов german необходимо исправить все таблицы с помощью isamchk -r, так как в порядке сортировки произведены некоторые изменения!
Возвращаемый по умолчанию тип выражения IF теперь зависит от обоих аргументов, а не только от первого.
AUTO_INCREMENT теперь не будет работать с отрицательными числами; причина в том, что отрицательные числа вызывали проблемы при переходе от -1 к 0. Для таблиц MyISAM AUTO_INCREMENT не обрабатывается на более низком уровне и работает намного быстрее, чем раньше. Для таблиц MyISAM старые автоинкрементные номера также не используются повторно, даже при удалении из таблицы строк.
CASE, DELAYED, ELSE, END, FULLTEXT, INNER, RIGHT, THEN и WHEN сейчас являются зарезервированными словами.
FLOAT(X) сейчас является настоящим типом данных с плавающей точкой, а не величиной с фиксированным числом десятичных знаков.
При объявлении DECIMAL(length,dec) аргумент length больше не включает в себя место для знака или десятичной точки.
Строка TIME теперь должна представлять собой один из следующих форматов: [[[DAYS] [H]H:]MM:]SS[.fraction] или [[[[[H]H]H]H]MM]SS[.fraction].
LIKE сейчас сравнивает строки, используя те же правила сравнения символов, что и =. Если необходим старый режим работы, то можно скомпилировать MySQL с флагом CXXFLAGS=-DLIKE_CMP_TOUPPER.
Выражение REGEXP сейчас является независимым от регистра символов для нормальных (не двоичных) строк.
При проверке/исправлении таблиц необходимо использовать CHECK TABLE или myisamchk для таблиц MyISAM (`.MYI') и isamchk для таблиц ISAM
(`.ISM').
Чтобы обеспечить совместимость файлов mysqldump между версией MySQL 3.22 и версией 3.23, не следует использовать опцию --opt или --all для mysqldump.
Проверьте все ваши вызовы функции DATE_FORMAT(), чтобы убедиться, что перед каждым символом формата имеется `%' (в версии MySQL 3.22 и более поздних этот синтаксис уже допускается).
mysql_fetch_fields_direct сейчас является функцией (был макрос) и возвращает указатель на MYSQL_FIELD вместо MYSQL_FIELD.
Функцию mysql_num_fields() больше нельзя использовать на объектах MYSQL* (сейчас это функция, принимающая MYSQL_RES* в качестве аргумента, так что вместо нее следует применять mysql_field_count()).
В версии MySQL 3.22 вывод SELECT DISTINCT ... почти всегда был отсортированным. Чтобы получить отсортированный вывод в версии 3.23, необходимо использовать GROUP BY или ORDER BY.
Функция SUM() сейчас возвращает NULL вместо 0 при отсутствии сопоставляемых строк: это сделано для соответствия с ANSI SQL.
Операторы AND или OR с величинами NULL теперь будут возвращать NULL
вместо 0. В основном, это влияет на запросы, в которых используется NOT на выражениях AND/OR, так как NOT NULL = NULL. LPAD() и RPAD() будут укорачивать результирующую строку, если она длиннее, чем аргумент длины.
Содержание раздела