2.5.2 Модернизация с версии 3.23 до версии 4.0 | Оглавление | 2.5.4 Модернизация с версии 3.21 до версии 3.22 |
В версии 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
).
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()
).
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()
будут укорачивать результирующую строку, если она длиннее, чем
аргумент длины.
2.5.2 Модернизация с версии 3.23 до версии 4.0 | Оглавление | 2.5.4 Модернизация с версии 3.21 до версии 3.22 |