В версии 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()
будут укорачивать результирующую строку, если она длиннее, чем аргумент длины.