Spec-Zone.ru › MariaDB

Сравнение типов SQL Server и MariaDB

Эта страница помогает сопоставить каждый тип SQL Server с соответствующим типом MariaDB.

Числа

В MariaDB числовые типы могут быть объявлены как SIGNED или UNSIGNED. По умолчанию числовые столбцы являются SIGNED, поэтому отсутствие указания ни того, ни другого не нарушит совместимость с SQL Server.

При использовании UNSIGNED значений существует потенциальная проблема с вычитанием. При вычитании UNSIGNED значения из другого, результат обычно является UNSIGNED типом. Но если результат отрицательный, это вызовет ошибку. Для решения этой проблемы можно включить флаг NO_UNSIGNED_SUBTRACTION в sql_mode.

Для получения дополнительной информации см. Обзор числовых типов данных.

Целые числа

Типы SQL Server Размер (байты) Типы MariaDB Размер (байты) Примечания
tinyint 1 TINYINT 1
smallint 2 SMALLINT 2
MEDIUMINT 3 Занимает 3 байта на диске, но 4 байта в памяти
int 1 INT / INTEGER 4
bigint 8 BIGINT 8

Вещественные числа (приближенные)

Типы SQL Server Точность Размер Типы MariaDB Размер
float(1-24) 7 цифр 4 FLOAT(0-23) 4
float(25-53) 15 цифр 8 FLOAT(24-53) 8

MariaDB поддерживает альтернативную синтаксическую конструкцию: FLOAT(M, D). M — общее количество цифр, D — количество цифр после десятичной точки.

См. также: Точность чисел с плавающей точкой.

Псевдонимы

В SQL Server real является псевдонимом для float(24).

В MariaDB DOUBLE и DOUBLE PRECISION являются псевдонимами для FLOAT(24-53).

Обычно REAL также является синонимом для FLOAT(24-53). Однако переменная sql_mode может быть установлена со флагом REAL_AS_FLOAT для того, чтобы REAL был синонимом для FLOAT(0-23).

Вещественные числа (точные)

Типы SQL Server Точность Размер (байты) Типы MariaDB Точность Размер (байты)
decimal 0 - 38 До 17 DECIMAL 0 - 38 См. таблицу

MariaDB поддерживает такой синтаксис: DECIMAL(M, D). M и D необязательны. M — общее количество цифр (по умолчанию 10), D — количество цифр после десятичной точки (по умолчанию 0). В SQL Server значения по умолчанию составляют соответственно 18 и 0. Причина этого различия в том, что стандарт SQL предписывает значение по умолчанию 0 для D, но оставляет реализацию свободной в выборе значения по умолчанию для M.

SQL Server DECIMAL эквивалентен MariaDB DECIMAL(18).

Псевдонимы

В обоих SQL Server и MariaDB распознаются следующие псевдонимы для DECIMAL: DEC, NUMERIC. MariaDB также позволяет использовать FIXED.

Денежные значения

Типы SQL Server money и smallmoney представляют вещественные числа, гарантируя очень низкий уровень приближения (точность до пяти десятичных знаков), необязательно связанные с одной из поддерживаемых валют.

В MariaDB нет типов для денежных значений. Для представления денежных сумм:

  • Храните валюту в отдельном столбце, если необходимо. Можно использовать внешний ключ к таблице валют или тип ENUM.
  • Используйте не приближенный тип:
    • DECIMAL очень удобен, так как позволяет сохранить число в неизменном виде. Но вычисления потенциально медленнее.
    • Тип целого числа быстрее для вычислений. Можно, например, хранить сумму денег, умноженную на 100.

Существует небольшая несовместимость, о которой пользователи должны знать. money и smallmoney точны примерно до 4 десятичных знаков. Это означает, что если вы используете достаточное количество десятичных знаков, операции с этими типами могут давать результаты, отличные от результатов, которые они бы дали в MariaDB.

Биты

Тип BIT поддерживается в MariaDB. Его максимальный размер составляет BIT(64). Тип BIT имеет фиксированную длину. Если мы вставляем значение, требующее меньше битов, чем выделено, слева добавляются нулевые биты.

В MariaDB двоичные значения можно записать одним из следующих способов:

  • b'value'
  • 0value , где value — последовательность цифр 0 и 1. Также можно использовать шестнадцатеричный синтаксис. Подробности см. в Двоичные литералы и Шестнадцатеричные литералы.

MariaDB и SQL Server имеют разные наборы побитовых операторов. См. Битовые функции и операторы.

Логический псевдотип

В SQL Server обычно используется bit для представления логических значений. В MariaDB это тоже возможно, но не является распространённой практикой.

Столбец также можно определить как BOOLEAN или BOOL, что является всего лишь синонимом для TINYINT. Ключевые слова TRUE и FALSE также существуют, но являются синонимами для 1 и 0. Чтобы понять, что это подразумевает, см. Логические литералы.

В MariaDB 'True' и 'False' всегда являются строками.

Дата и время

Типы SQL Server Диапазон Точность Размер (байты) Типы MariaDB Диапазон Размер (байты) Точность Примечания
date 0001-01-01 - 9999-12-31 3 / DATE 0001-01-01 - 9999-12-31 3 / Они охватывают тот же диапазон
datetime 1753-01-01 - 9999-12-31 8 0 до 3, округленные DATETIME 001-01-01 - 9999-12-31 8 0 до 6 Значения MariaDB не приближены, см. ниже.
datetime2 001-01-01 - 9999-12-31 8 6 до 8 DATETIME 001-01-01 - 9999-12-31 8 0 до 6 Значения MariaDB не приближены, см. ниже.
smalldatetime DATETIME
datetimeoffset DATETIME
time TIME

Также можно рассмотреть следующие типы MariaDB:

  • TIMESTAMP имеет мало общего с timestamp в SQL Server. В MariaDB это количество секунд, прошедших с начала 1970-01-01, с десятичной точностью до 6 знаков (по умолчанию 0). Значение можно необязательно автоматически установить до текущего временного отметки при вставке, при обновлении или обоих. Не предназначен для уникальной идентификации строк.
  • YEAR — это 1-байтовый тип, представляющий годы от 1901 до 2155, а также 0000.

Значения нулей

MariaDB допускает специальное значение, где все части даты равны нулю: '0000-00-00'. Это можно запретить, установив sql_mode=NO_ZERO_DATE.

Также можно использовать значения, где только некоторые части даты равны нулю, например, '1994-01-00' или '1994-00-00' . Эти значения можно запретить, установив sql_mode=NO_ZERO_IN_DATE. Они не зависят от NO_ZERO_DATE.

Синтаксис

Понимаются несколько различных форматов дат. Обычно используются форматы 'YYYY-MM-DD' и YYYYMMDD . Принимаются несколько разделителей.

Понимаются синтаксис, определенный в стандарте SQL и ODBC — например, DATE '1994-01-01' и {d '1994-01-01'} . Использование этих форматов устраняет возможные неоднозначности в контекстах, где временное значение может интерпретироваться как строка или как целое число.

Подробности см. в Литералы дат и времени.

Точность

Для временных типов, включающих время суток, MariaDB позволяет задавать точность от 0 до 6 (микросекунды), по умолчанию 0. Подсекундная часть никогда не приближается. Добавляет до 3 байтов. Подробности см. в Требования к хранению типов данных.

Строки и двоичные данные

Двоичные строки

Типы SQL Server Размер (байты) Типы MariaDB Примечания
binary 1 до 8000 VARBINARY или BLOB См. ниже для типов BLOB
varbinary 1 до 8000 VARBINARY или BLOB См. ниже для типов BLOB
image 2^31-1 VARBINARY или BLOB См. ниже для типов BLOB

Тип VARBINARY похож на VARCHAR, но хранит двоичные байтовые строки, так же как и binary в SQL Server.

Для больших двоичных строк MariaDB имеет четыре типа BLOB, с различными размерами. Подробнее см. Типы данных BLOB и TEXT.

Строки символов

Важное отличие между SQL Server и MariaDB заключается в том, что в MariaDB наборы символов не зависят от типов и кодировок. Наборы символов могут быть установлены на уровне базы данных, таблицы или столбца. Если этого не сделать, применяются значения по умолчанию, указанные в системной переменной character_set_server.

Для создания таблицы MariaDB, идентичной таблице SQL Server, возможно, потребуется указать набор символов для каждого столбца строк. Однако во многих случаях использование UTF-8 будет работать.

Типы SQL Server Размер (байты) Типы MariaDB Размер (байты) Набор символов
char 1 до 8000 CHAR 0 до 255 utf8mb4 (1, 4)
varchar 1 до 8000 VARCHAR 0 до 65 532 (2) utf8mb4 (1)
text 2^31-1 TEXT 2^31-1 ucs2
nchar 2 до 8000 CHAR 0 до 255 utf16 или ucs2 (3, 4)
nvarchar 2 до 8000 VARCHAR 0 до 65 532 (2) (5) utf16 или ucs2 (1) (3)
ntext 2^30 - 1 TEXT 2^31-1 ucs2

Примечания:

1) Если SQL Server использует кодировку без поддержки Unicode, используется подмножество UTF-8. Поэтому можно использовать и меньший набор символов в MariaDB.

2) InnoDB имеет максимальную длину строки 65 535 байт. Столбцы типа TEXT не влияют на размер строки, так как они хранятся отдельно (кроме первых 12 байт).

3) В SQL Server используется UTF-16, если данные содержат дополнительные символы, в противном случае используется UCS-2. Если не уверены, используйте utf16 в MariaDB.

4) В SQL Server значение ANSI_PADDING определяет, должны ли значения char быть дополнены пробелами до их максимальной длины. В MariaDB это зависит от флага sql_mode PAD_CHAR_TO_FULL_LENGTH.

5) См. JSON ниже.

Специальные типы SQL Server

rowversion

В MariaDB нет типа rowversion.

Если единственная цель — проверить, была ли строка изменена с момента последнего чтения, можно использовать столбец TIMESTAMP. Его значение по умолчанию должно быть ON UPDATE CURRENT_TIMESTAMP. Таким образом, метка времени будет обновляться каждый раз при изменении столбца.

Способом сохранения гораздо больше информации является использование временной таблицы. Предыдущие версии строки будут сохранены.

sql_variant

MariaDB не поддерживает тип sql_variant.

MariaDB достаточно гибкий в отношении неявных и явных преобразований типов. Поэтому в большинстве случаев хранение значений в виде строки должно быть эквивалентно использованию sql_variant.

Учитывайте, что максимальная длина значения sql_variant составляет 8000 байт. В MariaDB вам может потребоваться использовать TINYBLOB.

uniqueidentifier

Хотя MariaDB не поддерживает тип uniqueidentifier, тип UUID обычно можно использовать для той же цели.

Столбцы uniqueidentifier содержат 16-разрядные GUID. Столбцы UUID в MariaDB хранят значения UUIDv1 (128 бит).

Тип UUID был реализован в MariaDB 10.7. В более старых версиях вы можете генерировать уникальные значения с помощью функций UUID() или UUID_SHORT() и хранить их в столбцах BIT(128) или BIT(64) соответственно.

xml

MariaDB не поддерживает тип xml.

Данные XML могут храниться в строковых столбцах. MariaDB поддерживает несколько функций XML.

JSON

В SQL Server JSON-документы обычно хранятся в столбцах nvarchar в текстовой форме.

MariaDB имеет псевдотип JSON, который сопоставляется с LONGTEXT. Однако, начиная с MariaDB 10.5, псевдотип JSON также проверяет, является ли значение допустимым JSON-документом.

MariaDB поддерживает другие функции JSON, чем SQL Server. В MariaDB функций сейчас больше, и синтаксис SQL Server не будет работать. Подробнее см. Функции JSON.

Уникальные типы MariaDB

Следующие типы поддерживаются в MariaDB и не имеют прямого эквивалента в SQL Server. Если вы мигрируете свою базу данных в MariaDB, вы можете рассмотреть возможность использования этих типов.

  • INET6 — адреса IPv6.
  • INET4 — адреса IPv4.
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают мнения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/sql-server-and-mariadb-types-comparison/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API