поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    1.11.1.3. Различия в синтаксисе SQL между mSQL 2.0 и MySQL

    Типы столбцов

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

     
    © 1997-2005 PHP Club Team
    Rambler's Top100