MySQL | Типы данных
Последнее обновление: 25.05.2018
При определении столбцов таблицы для них необходимо указать тип данных. Каждый столбец должен иметь тип данных. Тип данных определяет, какие значения могут храниться в столбце, сколько они будут занимать места в памяти.
MySQL предоставляет следующие типы данных, которые можно разбить на ряд групп.
Символьные типы
CHAR: представляет строку фиксированной длины.
Длина хранимой строки указывается в скобках, например,
CHAR(10)
— строка из десяти символов. И если в таблицу в данный столбец сохраняется строка из 6 символов (то есть меньше установленной длины в 10 символов), то строка дополняется 4 пробелами и в итоге все равно будет занимать 10 символовТип CHAR может хранить до 255 байт.
VARCHAR: представляет строку переменной длины.
Длина хранимой строки также указыватся в скобках, например,
VARCHAR(10)
.Всего тип VARCHAR может хранить до 65535 байт.
Начиная с MySQL 5.6 типы CHAR и VARCHAR по умолчанию используют кодировку UTF-8, которая позволяет использовать до 3 байт для хранения символа в зависимости от языка ( для многих европейских языков по 1 байту на символ, для ряда восточно-европейских и ближневосточных — 2 байта, а для китайского, японского, корейского — по 3 байта на символ).
Ряд дополнительных типов данных представляют текст неопределенной длины:
TINYTEXT: представляет текст длиной до 255 байт.
TEXT: представляет текст длиной до 65 КБ.
MEDIUMTEXT: представляет текст длиной до 16 МБ
LARGETEXT: представляет текст длиной до 4 ГБ
Числовые типы
TINYINT: представляет целые числа от -128 до 127, занимает 1 байт
BOOL: фактически не представляет отдельный тип, а является лишь псевдонимом для типа
TINYINT(1)
и может хранить два значения 0 и 1.Также имеет псевдоним 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)
Число 5 —
precision
, а число 2 —scale
, поэтому данный столбец может хранить значения из диапазона от -999.99 до 999.99.Размер данных в байтах для DECIMAL зависит от хранимого значения.
Данный тип также имеет псевдонимы NUMERIC, DEC, FIXED.
FLOAT: хранит дробные числа с плавающей точкой одинарной точности от -3. 4028 * 1038 до 3.4028 * 1038, занимает 4 байта
Может принимать форму
.FLOAT(M,D)
, гдеM
— общее количество цифр, аD
— количество цифр после запятойDOUBLE: хранит дробные числа с плавающей точкой двойной точности от -1.7976 * 10308 до 1.7976 * 10
308, занимает 8 байт. Также может принимать формуDOUBLE(M,D)
, гдеM
— общее количество цифр, аD
— количество цифр после запятой.Данный тип также имеет псевдонимы REAL и DOUBLE PRECISION, которые можно использовать вместо DOUBLE.
Типы для работы с датой и временем
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».
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-часовой формат. Он может принимать время в различных форматах:
Примеры значений для типов DATETIME и TIMESTAMP:
2018-05-25 19:21:34
2018-05-25
(хранимое значение2018-05-25 00:00:00
)
Составные типы
Бинарные типы
TINYBLOB: хранит бинарные данные в виде строки длиной до 255 байт.
BLOB: хранит бинарные данные в виде строки длиной до 65 КБ.
MEDIUMBLOB: хранит бинарные данные в виде строки длиной до 16 МБ
LARGEBLOB: хранит бинарные данные в виде строки длиной до 4 ГБ
НазадСодержаниеВперед
Формат даты в MySQL
← →
tERRORist
(2003-04-22 21:44) [0]
Можно ли изменить формат столбцов данных типа date в СУБД MySQL 4. 1.0? По умолчанию там стоит американский yyyy-mm-dd. А хотелось бы наш: дд.мм.гггг, чтобы передавать параметр в запрос беря дату из datetimepicker»a, или это в принципе невозможно?
← →
Anatoly Podgoretsky
(2003-04-22 23:56) [1]
Американцы на тебя обидятся, они не применяют такой формат
← →
Johnmen
(2003-04-23 00:10) [2]
В файле настройки выставь нужный. Если память не изменяет (:)), то my.ini (mysql.ini ?)
← →
fidget
(2003-04-23 11:44) [3]
> В файле настройки выставь нужный.
Это настройками не регулируется. В 4.1. я тоже таких нововведений не помню.
Есть функция DATE_FORMAT() для вывода в нужном формате, а хранить можно только в таком.
← →
Соловьев
(2003-04-23 11:49) [4]
ShortFormatDate := "yyyy" + dateSeparator + "mm" + dateSeparator + "dd";
← →
СВ
(2003-04-24 07:15) [5]
Для вывода даты вызываешь feilds editor у query. Выделяешь поле
и меняешь св-ва
Display Format= dd/mm/yyyy
Edit mask = 99/99/0000;1;_
Для ввода
query.Parameters.ParamByName(«@1»).value :=DateTimePicker1.DATE;
← →
NAlexey
(2003-04-24 08:26) [6]
Не знаю как в Win98, в Win2k формат используемой даты задается в ControlPanel->RegionalOptions->Date. От туда же он и берется в ShortDateFormat и в остальные места. Если SQL сервер плюёт на этот формат, то в настройках: Programs->MSSQL->SQLServer client Network Utility->(Закладка)DB-LibraryOptions проставить галку Use International Settings.
← →
Шаман
(2003-04-24 11:57) [7]
Ага MSSQL b MySQL совсем одно и тоже 🙂
← →
NAlexey
(2003-04-24 13:12) [8]
>Ага MSSQL b MySQL совсем одно и тоже :)
Извиняюсь.
MySQL ФОРМАТ | Как функция FORMAT работает в MySQL?
В следующей статье представлен обзор MySQL FORMAT. Функция FORMAT используется для форматирования числового значения в таблице до любых желаемых десятичных знаков. Предположим, что столбцы таблицы имеют различные десятичные знаки: один округлен до 2 знаков, другой столбец округлен до 4 знаков. И в результирующем выводе мы должны получить произведение этих двух столбцов. В таких случаях вывод может иметь различные десятичные разряды. Каждая строка, имеющая отличные друг от друга десятичные точки, может вызвать большую двусмысленность. Итак, в результирующем запросе SELECT мы можем напрямую использовать функцию FORMAT и указать, до какого числа десятичных знаков следует округлить вывод. Это допустимо в сценариях, где выходная переменная не является предопределенной.
Синтаксис MySQL FORMAT
Функция FORMAT используется для форматирования любого числового значения в нашем выводе.
Синтаксис этой функции будет следующим:
ФОРМАТ (имя_столбца, десятичные_точки)
Здесь имя_столбца — это поле, которое должно быть округлено, а десятичные_точки — до скольких разрядов округляется значение. к.
Подробное примечание: синтаксис может включать еще одно необязательное поле.
ФОРМАТ (имя_столбца, десятичные_точки, языковой стандарт)
Здесь локаль поля относится к разделителям и группировкам. Это необязательное поле, которое не определено явно, поэтому по умолчанию используется локаль en_US. В MySQL определено более 100 локалей.
Как функция FORMAT работает в MySQL?
Ниже показано, как функция FORMAT работает в MySQL:
Пример #1
Давайте отформатируем значение с большим количеством знаков после запятой до двух.
Код:
ВЫБЕРИТЕ ФОРМАТ(1500.26543,2) значение;
В запросе предлагается округлить значение 1500,26543 до 2 знаков вместо 5 знаков после запятой. Надеюсь, вы знакомы с принципами округления при рассмотрении значений выше 5 и ниже 5. Итак, здесь ожидаемый результат равен 1500,27 (поскольку третья цифра после запятой равна 5).
Вывод:
Пример #2
Давайте рассмотрим другой пример, как показано ниже.
Код:
ВЫБЕРИТЕ ФОРМАТ (1500.26111,2) значение;
Итак, здесь третья цифра после запятой меньше 5, поэтому ожидаемый результат равен 1500,26.
Вывод:
Пример #3
Функция ФОРМАТ также добавляет дополнительные нули для расширения десятичных разрядов.
Код:
ВЫБЕРИТЕ ФОРМАТ(1500.2,2) значение;
Значение равно 1500,2 и имеет только один десятичный разряд. Но результат должен иметь 2 десятичных знака. Таким образом, к этому запросу будет добавлен лишний ноль.
Вывод:
Пример #4
Теперь рассмотрим таблицу инвентаризации с данными в виде количества товаров на складе и цены за единицу для каждого товара. Выходным результатом в этом сценарии является общая стоимость запасов, которая будет произведением количества единиц и цены за единицу для каждого товара на складе.
Рассмотрим следующую таблицу:
Код:
выбрать * из инвентаря;
Выход:
Сначала мы увидим результат без использования функции FORMAT.
Код:
ВЫБЕРИТЕ наименование товара, значение на складе * Цена за товар Стоимость продукта ИЗ запасов;
В результате отображаются столбцы itemName и ProductCost, где столбец ProductCost представляет собой произведение значений inStockValue и PricePerItem.
Вывод:
Итак, вывод будет выглядеть так. Выглядит конечно неуклюже и очень неуместно.
Теперь мы можем использовать функцию FORMAT и получить более красивый результат.
Код:
ВЫБЕРИТЕ наименование товара, ФОРМАТ (instockValue * PricePerItem, 2) ProductCost
ИЗ запасов;
Мы указали десятичные разряды, которые в этом случае округляются до 2.
Вывод:
Если мы сравним результаты этого запроса и предыдущего запроса, мы сможем понять, что последний вывод более четкий.
Мы также можем округлить десятичные разряды до нуля.
Код:
ВЫБЕРИТЕ имя товара, ФОРМАТ (instockValue * PricePerItem, 0) ProductCost
ИЗ запасов;
Вывод:
Здесь вывод округляется до нуля знаков после запятой. Мы можем указать десятичные разряды равными 0, или, если мы оставим это поле пустым, рассматриваемое значение по умолчанию равно 0.
Пример #5
Мы говорили об использовании локали в запросе FORMAT. По умолчанию локаль en_US. Давайте попробуем любую другую локаль и выявим разницу.
Мы увидим два примера для локалей.
а. Этот запрос должен обновить выходные данные как испанские в Испании.
Код:
ВЫБЕРИТЕ имя товара, ФОРМАТ (instockValue * PricePerItem, 2, 'es_ES') ProductCost
ИЗ запасов;
Вывод:
б. Десятичная точка заменяется запятой «,» вместо точки «.» в этой локали. И группировки тысяч в этом формате нет.
Давайте попробуем другую локаль
Код:
ВЫБЕРИТЕ имя товара, ФОРМАТ (instockValue * PricePerItem, 2, 'de_DE') ProductCost
ИЗ запасов;
Вывод:
В этом языковом стандарте запятая (,) используется в качестве десятичной точки, а точка (.) для группировки тысяч. Это противоположно локали по умолчанию en_EN.
Заключение
В этой статье мы рассмотрели синтаксис и примеры функции FORMAT. Функция FORMAT используется для отображения вывода в желаемом формате с правильными десятичными знаками. Это используется в запросе SELECT, и синтаксис включает в себя числовое значение для форматирования, количество десятичных разрядов и, при необходимости, также можно указать языковой стандарт. Важно отметить, что тип данных значений должен быть десятичным. Потому что в типе данных INT десятичные разряды уже недействительны. Значение локали по умолчанию — en_EN.
Рекомендуемые статьи
Это руководство по MySQL FORMAT. Здесь мы обсуждаем введение вместе с тем, как функция FORMAT работает в MySQL? соответственно. Вы также можете ознакомиться со следующими статьями, чтобы узнать больше:
- Индекс MySQL
- MySQL ДЕКОДИРОВАНИЕ ()
- Функции даты MySQL
- Логическое значение MySQL
Форматирование полей даты с помощью MySQL DATE_FORMAT()
Создание отказоустойчивых систем на AWS : Узнайте, как спроектировать и внедрить отказоустойчивую, высокодоступную и отказоустойчивую инфраструктуру на AWS.
Я использую поля MySQL DATE и DATETIME почти так же часто, как и поля VARCHAR. Я использую их в основном для отслеживания создания записей, обновлений записей и дат истечения срока действия записей. Формат даты по умолчанию в MYSQL:
.2008-09-10 22:50:02
Когда я вывожу эту информацию на страницу, я хочу показать дату в удобочитаемом формате. Вот тут-то и появляется функциональность MySQL DATE_FORMAT. DATE_FORMAT позволяет мне форматировать дату любым удобным для вас способом.
MySQL DATE_FORMAT() Пример
DATE_FORMAT(NOW(),'%W, %M %e, %Y @ %h:%i %p') #yields 'Воскресенье, 20 сентября 2008 г., 12:45'
MySQL DATE_FORMAT() Буквенные представления
Спецификатор | Описание |
---|---|
%а | Сокращенное название дня недели
( Вс .. Сб ) |
%b | Сокращенное название месяца ( янв. .. дек. ) |
%с | Месяц, числовой ( 0 .. 12 ) |
%D | День месяца с английским суффиксом ( 0th , 1-й , 2-й , 3-й , …) |
%d | День месяца, числовой ( 00 . . 31 ) |
%е | День месяца, числовой ( 0 .. 31 ) |
%f | микросекунд ( 000000 .. 999999 ) |
%H | Час ( 00 .. 23 ) |
%ч | Час ( 01 .. 12 ) |
%I | Час ( 01 .. 12 ) |
%i | Минуты, числовое ( 00 .. 59 ) |
%j | День года ( 001 .. 366 ) |
%k | Час ( 0 .. 23 ) |
%1 | час ( 1 . . 12 ) |
%М | Название месяца ( январь .. декабрь ) |
%м | Месяц, числовой ( 00 .. 12 ) |
%р | утра или вечера |
%r | Время, 12 часов ( чч:мм:сс с последующим утра или вечера ) |
%S | секунд ( 00 .. 59 ) |
%s | секунд ( 00 .. 59 ) |
%Т | Время, 24 часа ( чч:мм:сс ) |
%U | неделя ( 00 . . 53 ), где воскресенье
первый день недели |
%u | неделя ( 00 .. 53 ), где понедельник — это
первый день недели |
%В | неделя ( 01 .. 53 ), где воскресенье
воскресенье; используется с %X |
%v | неделя ( 01 .. 53 ), где понедельник — это
воскресенье; используется с %x |
%W | Название дня недели ( Воскресенье .. Суббота ) |
Вес % | День недели
( 0 =воскресенье.. 6 =суббота) |
%Х | Год недели, где воскресенье — первый день недели, числовое,
четыре цифры; используется с %V |
%х | Год недели, где понедельник — первый день недели, числовое,
четыре цифры; используется с %v |
%Y | Год, числовое, четыре цифры |
%г | Год, цифра (две цифры) |
%% | Литеральный символ « % » |
% | х , для любого х » не указано
выше |
Будьте добры к своим пользователям и форматируйте дату для них!
- name/css-filters» itemscope=»» itemtype=»http://schema.org/Article»>
Дэвид Уолш
Быть папой-разработчиком
Каждый день мне задают множество вопросов, но я всегда удивляюсь, что они редко касаются кода или даже технологий — многие из них вопросы, которые я получаю, больше касаются вещей, не связанных с разработчиками, таких как мой офис, какое программное обеспечение я использую и часто…
Дэвид Уолш
Фильтры CSS
Поддержка фильтров CSS недавно появилась в ночных клубах WebKit. Фильтры CSS предоставляют метод изменения рендеринга базового элемента DOM, изображения или видео. Фильтры CSS позволяют размывать, деформировать и изменять интенсивность цвета элементов. Давайте…