В версии 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()
будут укорачивать
результирующую строку, если она
длиннее, чем аргумент длины.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
