MySQL | Типы данных

Последнее обновление: 25.05.2018

При определении столбцов таблицы для них необходимо указать тип данных. Каждый столбец должен иметь тип данных. Тип данных определяет, какие значения могут храниться в столбце, сколько они будут занимать места в памяти.

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 МБ

  • LARGETEXT: представляет текст длиной до 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)

    Число 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».

    Занимает 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-dd2018-05-25

  • yyyy-m-dd2018-5-25

  • yy-m-dd18-05-25

    В таком формате двузначные числа от 00 до 69 воспринимаются как даты в диапазоне 2000-2069. А числа от 70 до 99 как диапазон чисел 1970 — 1999.

  • yyyymmdd20180525

  • 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? соответственно. Вы также можете ознакомиться со следующими статьями, чтобы узнать больше:

  1. Индекс MySQL
  2. MySQL ДЕКОДИРОВАНИЕ ()
  3. Функции даты MySQL
  4. Логическое значение 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 Год, числовое, четыре цифры
Год, цифра (две цифры)
%% Литеральный символ « % »
% x х , для любого х » не указано выше

Будьте добры к своим пользователям и форматируйте дату для них!

  • name/css-filters» itemscope=»» itemtype=»http://schema.org/Article»>

    Дэвид Уолш

    Фильтры CSS

    Поддержка фильтров CSS недавно появилась в ночных клубах WebKit. Фильтры CSS предоставляют метод изменения рендеринга базового элемента DOM, изображения или видео. Фильтры CSS позволяют размывать, деформировать и изменять интенсивность цвета элементов. Давайте…

  • Дэвид Уолш

    Быть папой-разработчиком

    Каждый день мне задают множество вопросов, но я всегда удивляюсь, что они редко касаются кода или даже технологий — многие из них вопросы, которые я получаю, больше касаются вещей, не связанных с разработчиками, таких как мой офис, какое программное обеспечение я использую и часто…