Типы столбцов
-
MySQL
Имеются следующие дополнительные типы (не считая остальных; see Раздел 6.5.3, «Синтаксис оператора
CREATE TABLE
»):ENUM
- тип для одного набора строк.SET
- тип для нескольких наборов строк.BIGINT
- тип для 64-битовых целых чисел.
-
Кроме того, MySQL поддерживает следующие атрибуты дополнительных типов:
UNSIGNED
- опция для целочисленных столбцов и столбцов чисел с плавающей запятой.ZEROFILL
- опция для целочисленных столбцов.AUTO_INCREMENT
- опция для целочисленных столбцов, являющихся первичными ключами. See Раздел 8.4.3.31, «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 Раздел 8.4.3.31, «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 Раздел 4.2.6, «Как работает система привилегий».
-
mSQL
Имеется файл
mSQL.acl
, в котором можно определить привилегии чтения/записи для пользователей.