Зачем нужен Unsigned int?
Всем привет! Понятное дело, что Unsigned может хранить только положительные числа, но. Как это можно использовать в разработке? Может выше производительность или еще что-то?
- Вопрос задан более трёх лет назад
- 3471 просмотр
Комментировать
Решения вопроса 2
Программист
например порядковый номер(id) не может быть отрицательным.
Максимальное число у беззнакового в два раза больше.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
finishhim.ru
По производительности разницы нет, по логике есть. Часто какие-то физические величины не могут быть отрицательными: длина, ширина, вес. Что бы гарантировано не допустить ошибки попадания таких данных в БД можно использовать Unsigned.
Ну и размер максимального хранимого значения вырастет что немаловажно иногда.
Справочник по MySQL : SQL : Типы данных, используемые в базе данных MySQL
Необязательный флаг UNSIGNED задает, что будет создано поле для хранения без знаковых чисел (больших или равных 0).
TINYINT | Может хранить числа от -128 до 127 |
SMALLINT | Диапазон от -32 768 до 32 767 |
MEDIUMINT | Диапазон от -8 388 608 до 8 388 607 |
INT | Диапазон от -2 147 483 648 до 2 147 483 647 |
BIGINT | Диапазон от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
Дробные числа
Точно так же, как целые числа подразделяются в MySQL на несколько разновидностей, MySQL поддерживает и несколько типов дробных чисел.
В общем виде они записываются так:
ИмяТипа[(length, decimals)] [UNSIGNED]
Здесь length — количество знакомест (ширина поля), в которых будет размещено дробное число при его передаче.
decimals — количество знаков после десятичной точки, которые будут учитываться.
UNSIGNED — задает беззнаковые числа. FLOAT Число с плавающей точкой небольшой точности. DOUBLE Число с плавающей точкой двойной точности. REAL Синоним для DOUBLE. DECIMAL Дробное число, хранящееся в виде строки. NUMERIC Синоним для DECIMAL.
Строки
Строки представляют собой массивы символов. Обычно при поиске по текстовым полям по запросу SELECT не берется в рассмотрение регистр символов, т.е. строки «Вася» и «ВАСЯ» считаются одинаковыми. Кроме того, если база данных настроена на автоматическую перекодировку текста при его помещении и извлечении, эти поля будут храниться в указанной вами кодировке.
Для начала ознакомимся с типом строки, которая может хранить не более length символов, где length принадлежит диапазону от 1 до 255.
VARCHAR (length) [BINARY]
При занесении некоторого значения в поле такого типа из него автоматически вырезаются концевые пробелы. Если указан флаг BINARY, то при запросе SELECT строка будет сравниваться с учетом регистра.
VARCHAR | Может хранить не более 255 символов. |
TINYTEXT | Может хранить не более 255 символов. |
TEXT | Может хранить не более 65 535 символов. |
MEDIUMTEXT | Может хранить не более 16 777 215 символов. |
LONGTEXT | Может хранить не более 4 294 967 295 символов. |
Чаще всего применяется тип TEXT, но если вы не уверены, что данные не будут превышать 65 536 символов, используйте LONGTEXT.
Бинарные данные
Бинарные данные — это почти то же самое, что и данные в формате TEXT, но только при поиске в них учитывается регистр символов.
TINYBLOB | Может хранить не более 255 символов. |
BLOB | Может хранить не более 65 535 символов. |
MEDIUMBLOB | Может хранить не более 16 777 215 символов. |
LONGBLOB | Может хранить не более 4 294 967 295 символов. |
BLOD-данные не перекодируются автоматически, если при работе с установленным соединением включена возможность перекодирования текста «на лету».
Дата и время
MySQL поддерживает несколько типов полей, специально приспособленных для хранения дат и времени в различных форматах.
DATE | Дата в формате ГГГГ-ММ-ДД |
TIME | Время в формате ЧЧ:ММ:СС |
DATETIME | Дата и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС |
TIMESTAMP | Дата и время в формате timestamp. Однако при получении значения поля оно отображается не в формате timestamp, а в виде ГГГГММДДЧЧММСС, что сильно умаляет преимущества его использования в PHP |
Unsigned sql что это
При определении столбцов таблицы для них необходимо указать тип данных. Каждый столбец должен иметь тип данных. Тип данных определяет, какие значения могут храниться в столбце, сколько они будут занимать места в памяти.
MySQL предоставляет следующие типы данных, которые можно разбить на ряд групп.
Символьные типы
- CHAR : представляет строку фиксированной длины. Длина хранимой строки указывается в скобках, например, CHAR(10) — строка из десяти символов. И если в таблицу в данный столбец сохраняется строка из 6 символов (то есть меньше установленной длины в 10 символов), то строка дополняется 4 пробелами и в итоге все равно будет занимать 10 символов Тип CHAR может хранить до 255 байт.
- VARCHAR : представляет строку переменной длины. Длина хранимой строки также указыватся в скобках, например, VARCHAR(10) . Однако в отличие от CHAR хранимая строка будет занимать именно столько места, сколько необходимо. Например, если определенная длина в 10 символов, но в столбец сохраняется строка в 6 символов, то хранимая строка так и будет занимать 6 символов плюс дополнительный байт, который хранит длину строки. Всего тип VARCHAR может хранить до 65535 байт.
Начиная с MySQL 5.6 типы CHAR и VARCHAR по умолчанию используют кодировку UTF-8, которая позволяет использовать до 3 байт для хранения символа в зависимости от языка ( для многих европейских языков по 1 байту на символ, для ряда восточно-европейских и ближневосточных — 2 байта, а для китайского, японского, корейского — по 3 байта на символ).
Ряд дополнительных типов данных представляют текст неопределенной длины:
- TINYTEXT : представляет текст длиной до 255 байт.
- TEXT : представляет текст длиной до 65 КБ.
- MEDIUMTEXT : представляет текст длиной до 16 МБ
- LONGTEXT : представляет текст длиной до 4 ГБ
Числовые типы
- TINYINT : представляет целые числа от -128 до 127, занимает 1 байт
- BOOL : фактически не представляет отдельный тип, а является лишь псевдонимом для типа TINYINT(1) и может хранить два значения 0 и 1. Однако данный тип может также в качестве значения принимать встроенные константы TRUE (представляет число 1) и FALSE (предоставляет число 0). Также имеет псевдоним BOOLEAN .
- TINYINT UNSIGNED : представляет целые числа от 0 до 255, занимает 1 байт
- SMALLINT : представляет целые числа от -32768 до 32767, занимает 2 байтa
- SMALLINT UNSIGNED : представляет целые числа от 0 до 65535, занимает 2 байтa
- MEDIUMINT : представляет целые числа от -8388608 до 8388607, занимает 3 байта
- MEDIUMINT UNSIGNED : представляет целые числа от 0 до 16777215, занимает 3 байта
- INT : представляет целые числа от -2147483648 до 2147483647, занимает 4 байта
- INT UNSIGNED : представляет целые числа от 0 до 4294967295, занимает 4 байта
- BIGINT : представляет целые числа от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, занимает 8 байт
- BIGINT UNSIGNED : представляет целые числа от 0 до 18 446 744 073 709 551 615, занимает 8 байт
- DECIMAL : хранит числа с фиксированной точностью. Данный тип может принимать два параметра precision и scale : DECIMAL(precision, scale) . Параметр precision представляет максимальное количество цифр, которые может хранить число. Это значение должно находиться в диапазоне от 1 до 65. Параметр scale представляет максимальное количество цифр, которые может содержать число после запятой. Это значение должно находиться в диапазоне от 0 до значения параметра precision. По умолчанию оно равно 0. Например, в определении следующего столбца:
salary DECIMAL(5,2)
Типы для работы с датой и временем
- DATE : хранит даты с 1 января 1000 года до 31 деабря 9999 года (c «1000-01-01» до «9999-12-31»). По умолчанию для хранения используется формат yyyy-mm-dd. Занимает 3 байта.
- TIME : хранит время от -838:59:59 до 838:59:59. По умолчанию для хранения времени применяется формат «hh:mm:ss». Занимает 3 байта.
- DATETIME : объединяет время и дату, диапазон дат и времени — с 1 января 1000 года по 31 декабря 9999 года (с «1000-01-01 00:00:00» до «9999-12-31 23:59:59»). Для хранения по умолчанию используется формат «yyyy-mm-dd hh:mm:ss». Занимает 8 байт
- TIMESTAMP : также хранит дату и время, но в другом диапазоне: от «1970-01-01 00:00:01» UTC до «2038-01-19 03:14:07» UTC. Занимает 4 байта
- YEAR : хранит год в виде 4 цифр. Диапазон доступных значений от 1901 до 2155. Занимает 1 байт.
Тип Date может принимать даты в различных форматах, однако непосредственно для хранения в самой бд даты приводятся к формату «yyyy-mm-dd». Некоторые из принимаемых форматов:
- yyyy-mm-dd — 2018-05-25
- yyyy-m-dd — 2018-5-25
- yy-m-dd — 18-05-25 В таком формате двузначные числа от 00 до 69 воспринимаются как даты в диапазоне 2000-2069. А числа от 70 до 99 как диапазон чисел 1970 — 1999.
- yyyymmdd — 20180525
- yyyy.mm.dd — 2018.05.25
Для времени тип Time использует 24-часовой формат. Он может принимать время в различных форматах:
- hh:mi — 3:21 (хранимое значение 03:21:00 )
- hh:mi:ss — 19:21:34
- hhmiss — 192134
Примеры значений для типов DATETIME и TIMESTAMP:
- 2018-05-25 19:21:34
- 2018-05-25 (хранимое значение 2018-05-25 00:00:00 )
Составные типы
- ENUM : хранит одно значение из списка допустимых значений. Занимает 1-2 байта
- SET : может хранить несколько значений (до 64 значений) из некоторого списка допустимых значений. Занимает 1-8 байт.
Бинарные типы
- TINYBLOB : хранит бинарные данные в виде строки длиной до 255 байт.
- BLOB : хранит бинарные данные в виде строки длиной до 65 КБ.
- MEDIUMBLOB : хранит бинарные данные в виде строки длиной до 16 МБ
- LONGBLOB : хранит бинарные данные в виде строки длиной до 4 ГБ
Что означает unsigned в MySQL: подробное объяснение
В MySQL ключевое слово unsigned используется для определения типа данных без знака. Это означает, что целочисленные значения в столбце не могут быть отрицательными и могут принимать только положительные значения и ноль. Пример использования:
CREATE TABLE users ( id INT UNSIGNED, name VARCHAR(50) );
В приведенном примере столбец «id» имеет тип данных INT и ключевое слово UNSIGNED указывает, что он может содержать только положительные значения и ноль.
Детальный ответ
Привет! В этой статье мы разберемся, что означает ключевое слово «unsigned» в MySQL и как оно влияет на типы данных. Давайте начнем!
Что такое «unsigned»?
В контексте MySQL «unsigned» означает, что числовое значение может быть только положительным или нулевым. Это свойство применяется к целочисленным типам данных, таким как «INT», «BIGINT» и другим.
Почему использовать «unsigned»?
Использование «unsigned» позволяет оптимизировать использование памяти и расширяет диапазон допустимых значений. Например, если вы знаете, что колонка в таблице не будет содержать отрицательные значения, использование «unsigned» позволит использовать все доступные биты для положительных значений, вместо распределения битов между положительными и отрицательными значениями. Давайте рассмотрим несколько примеров кода, чтобы лучше понять, как работает «unsigned».
Примеры
CREATE TABLE users ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, age TINYINT UNSIGNED, balance DECIMAL(10, 2) UNSIGNED );
В этом примере мы создаем таблицу «users» с двумя колонками, «age» и «balance». Обратите внимание, что для обеих колонок мы использовали «UNSIGNED».
Пример 1
INSERT INTO users (age, balance) VALUES (-25, 100.50);
Если мы попытаемся выполнить этот запрос, то получим ошибку, поскольку мы пытаемся вставить отрицательное значение в колонку «age», которая имеет тип «TINYINT UNSIGNED».
Пример 2
INSERT INTO users (age, balance) VALUES (30, -100.50);
В этом примере мы пытаемся вставить отрицательное значение в колонку «balance», которая имеет тип «DECIMAL UNSIGNED». Также здесь возникнет ошибка. Итак, вы видите, что использование «unsigned» требует соблюдения определенных ограничений, но если вы уверены, что значения всегда будут положительными или нулевыми, это может быть полезным свойством.
Заключение
Теперь вы знаете, что означает «unsigned» в MySQL. Он помогает оптимизировать использование памяти и расширяет диапазон допустимых значений для целочисленных типов данных. Однако следует быть внимательным, чтобы не пытаться вставить отрицательные значения в такие колонки. Используйте «unsigned» только тогда, когда вы уверены, что значения будут положительными или нулевыми. Надеюсь, этот материал был полезен для вас! Удачи в изучении MySQL!