Глава 1.11.1.3 Различия в синтаксисе SQL между mSQL 2.0 и MySQL
Типы столбцов
- MySQL
-
Имеются следующие дополнительные типы (не считая остальных; see section 6.5.3 Синтаксис оператора CREATE TABLE):
-
ENUM - тип для одного набора строк.
-
SET - тип для нескольких наборов строк.
-
BIGINT - тип для 64-битовых целых чисел.
-
-
Кроме того, MySQL поддерживает следующие атрибуты дополнительных
типов:
-
UNSIGNED - опция для целочисленных столбцов и столбцов чисел с
плавающей запятой.
-
ZEROFILL - опция для целочисленных столбцов.
-
AUTO_INCREMENT - опция для целочисленных столбцов, являющихся
первичными ключами. See section 8.4.3.126 mysql_insert_id().
-
DEFAULT - значение для всех столбцов.
- mSQL2
-
Типы столбцов в mSQL соответствуют приведенным в таблице типам MySQL:
Тип в mSQL | Соответствующий тип в MySQL
|
CHAR(len) | CHAR(len)
|
TEXT(len) | TEXT(len). len - максимальная длина. Работает LIKE.
|
INT | INT. Со множеством опций!
|
REAL | REAL. Или FLOAT. Имеются как 4-битовые, так и 8-битовые варианты.
|
UINT | INT UNSIGNED
|
DATE | DATE. Использует формат ANSI SQL, а не собственный формат mSQL.
|
TIME | TIME
|
MONEY | DECIMAL(12,2). Значение с фиксированной точкой и двумя знаками после нее.
|
Создание индексов
- MySQL
-
Индексы могут указываться во время создания таблицы при помощи оператора
CREATE TABLE.
- mSQL
-
Индексы создаются после создания таблицы с помощью операторов CREATE
INDEX.
Вставка уникального идентификатора в таблицу
- MySQL
-
Для указания типа столбца достаточно использовать AUTO_INCREMENT. See section 8.4.3.126 mysql_insert_id().
- mSQL
-
Необходимо создать в таблице SEQUENCE и выбрать столбец _seq.
Получение уникального идентификатора для строки
- MySQL
-
Следует добавить к таблице первичный или уникальный ключ и использовать
его. Новое в версии 3.23.11: если ключ PRIMARY или UNIQUE состоит только
из одного целочисленного столбца, к нему можно обращаться и как к _rowid.
- mSQL
-
Следует использовать столбец _rowid. Нельзя забывать о том, что _rowid
может, в зависимости от множества факторов, со временем измениться.
Получение времени последнего изменения столбца
- MySQL
-
Нужно вставить в таблицу столбец TIMESTAMP. Этому столбцу автоматически
присваиваются текущая дата и время при вызове операторов INSERT или
UPDATE, если ему не присвоить определенного значения или присвоить
значение NULL.
- mSQL
-
Следует использовать столбец _timestamp.
Сравнение значений NULL
- MySQL
-
MySQL соответствует стандарту ANSI SQL, поэтому сравнение с NULL
всегда возвращает результат NULL.
- mSQL
-
В mSQL выражение NULL = NULL имеет значение TRUE. Поэтому при переводе
старого кода из mSQL в MySQL =NULL необходимо заменить на IS NULL,
а <>NULL - на IS NOT NULL.
Сравнение строк
- MySQL
-
Обычно сравнение строк проводится без учета регистра символов, с порядком
сортировки, который определяется текущим набором символов (ISO-8859-1
Latin1 по умолчанию). Если вам это не подходит, необходимо установить при
объявлении столбцов атрибут BINARY, тогда сравнение будет проводиться в
соответствии с ASCII-порядком, установленным на сервере MySQL.
- mSQL
-
Все сравнения строк проводятся с учетом регистра символов в ASCII-порядке
сортировки.
Поиск без учета регистра символов
- MySQL
-
LIKE может быть как чувствительным, так и нечувствительным к регистру
оператором, в зависимости от столбцов, к которым он применяется. По
возможности MySQL использует индексы, если аргумент LIKE не начинается с
шаблонного символа.
- mSQL
-
Следует использовать CLIKE.
Обработка концевых пробелов
- MySQL
-
Все пробелы в конце столбцов CHAR и VARCHAR удаляются. Если такое
поведение нежелательно, используйте столбцы TEXT.
- mSQL
-
Концевые пробелы сохраняются.
Операторы WHERE
- MySQL
-
MySQL правильно определяет приоритеты действий (AND имеет приоритет перед
OR). Заставить MySQL вести себя так, как mSQL, можно при помощи
скобок (как можно видеть в соответствующем примере).
- mSQL
-
Все действия производятся слева направо. А это значит, что некоторые
логические вычисления, в которых наличествует более трех аргументов, не
могут быть выполнены вообще. Кроме того, это означает, что при переносе в
MySQL некоторые запросы необходимо менять. Это довольно просто
сделать при помощи скобок. Возьмем, к примеру, следующий запрос mSQL:
mysql> SELECT * FROM table WHERE a=1 AND b=2 OR a=3 AND b=4;
Чтобы MySQL вычислил результат этого запроса так же, как это сделал
бы mSQL, нужно расставить скобки:
mysql> SELECT * FROM table WHERE (a=1 AND (b=2 OR (a=3 AND (b=4))));
Ограничения доступа
- MySQL
-
Для хранения привилегий для каждого пользователя, удаленного компьютера и
базы имеются соответствующие таблицы. See section 4.2.6 Как работает система привилегий.
- mSQL
-
Имеется файл `mSQL.acl', в котором можно определить привилегии
чтения/записи для пользователей.