Типы столбцов
-
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.INTINT. Со множеством опций!REALREAL. ИлиFLOAT. Имеются как 4-битовые, так и 8-битовые варианты.UINTINT UNSIGNEDDATEDATE. Использует формат ANSI SQL, а не собственный формат mSQL.TIMETIMEMONEYDECIMAL(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
-
MySQLMySQL соответствует стандарту 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-порядке сортировки.
Поиск без учета регистра символов
-
MySQLLIKEможет быть как чувствительным, так и нечувствительным к регистру оператором, в зависимости от столбцов, к которым он применяется. По возможности MySQL использует индексы, если аргументLIKEне начинается с шаблонного символа. -
mSQLСледует использовать
CLIKE.
Обработка концевых пробелов
-
MySQLВсе пробелы в конце столбцов
CHARиVARCHARудаляются. Если такое поведение нежелательно, используйте столбцыTEXT. -
mSQLКонцевые пробелы сохраняются.
Операторы WHERE
-
MySQLMySQL правильно определяет приоритеты действий (
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, в котором можно определить привилегии чтения/записи для пользователей.