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', в котором можно определить привилегии
чтения/записи для пользователей.
Add your own comment.