Тип данных sql для телефона: fkn+antitotal | студентам & программистам

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

  • 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)

    Число 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 * 10308, занимает 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.dd2018.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 МБ

  • LONGBLOB: хранит бинарные данные в виде строки длиной до 4 ГБ

НазадСодержаниеВперед

Подробно о типах данных | SQL

0 ∞

  • Правильный выбор типов данных – важный этап проектирования таблиц
  • Столбцам необходимы типы данных
  • Типы данных, предусмотренные в системе
  • Символьные данные
  • Целые
  • Точные числовые данные
  • Приближенные числовые данные
  • Двоичные
  • Денежные
  • Даты
  • Тексты и образы
  • Специальные типы данных
  • Определяемые пользователями типы данных
  • Выберите правильный тип
  • Об авторе
  • Листинг 1. Создание таблицы авторов книг Authors с использованием только системных типов данных.
  • Листинг 2. Определение типов данных и последующее создание таблицы авторов книг Authors.

В следующих выпусках рубрики “T-SQL для начинающих” будет рассказано о применении синтаксиса T-SQL для построения таблиц. Но прежде чем начинать строить таблицы, необходимо поговорить о типах данных. Для каждого столбца таблицы должен быть определен некоторый тип данных, например, целые (integer) или символьные (character). Это позволяет системе в последующем контролировать данные, которые будут помещаться в этот столбец. В предлагаемой статье автор рассматривает предусмотренные в системе типы данных и рассказывает о том, как создавать собственные типы данных. Подобные дополнительные типы данных следует создать до того как начнется построение таблиц, ведь при создании таблиц могут понадобиться ссылки на эти типы данных. Определяемые пользователями типы данных позволят существенно усилить контроль над данными и повысить их целостность, особенно в проектах, в которых с базами данных параллельно работают несколько разработчиков.

При создании таблицы необходимо указать тип данных для каждого столбца. Любые данные, помещаемые в столбец, должны отвечать этому типу данных. В некоторых случаях следует указывать и допустимую длину данных в столбце. В листинге 1 приведен оператор SQL, который создает таблицу авторов Authors в базе данных публикаций Pubs, спользуя только предусмотренные в системе типы данных.

Большинство столбцов в этой таблице являются текстовыми полями. Номер телефона, обозначение штата и почтовый индекс всегда имеют постоянную длину, поэтому соответствующие им столбцы phone, state и ZIP удобнее объявить символьными (char). Имя автора, его адрес и город, где он живет, могут различаться по длине, поэтому для них предпочтительнее использовать тип символьных данных переменной длины (varchar). Столбец contract с информацией о наличии контракта с автором, в котором данные представляются в форме да/нет, целесообразно отнести к двоичному типу данных bit, у которого имеется два возможных значения – 0 и 1. Теперь остановимся подробнее на системных типах данных.

В версии SQL Server 6.0 определено 19 типов данных, а в версии SQL Server 7.0 добавлено еще 4 типа для удобства работы с закодированными с помощью Unicode данными, а также для поддержки приложений, основанных на использовании хранилищ данных. Каждый тип данных имеет ряд разновидностей, отличающихся возможным набором значений. Знание этих значений облегчит выбор подходящего типа данных.

Символьные данные типа char предсавляют собой один из наиболее распространенных типов данных. К этому типу относятся такие символьные данные, как имена или адреса. В версии SQL Server 6.5 длина любого столбца с символьными данными ограничивалась 255 знаками. Если же информация оказывалась длиннее, к примеру, если в столбец предполагалось вводить свободный комментарий по поводу контракта, то тогда следовало использовать текстовый тип данных (text). В SQL Server 7.0 это ограничение отменено, так что символьное поле может содержать до 8000 байтов. Верхняя граница обусловлена размером страницы памяти, поскольку ни одна запись не может располагаться в памяти на нескольких страницах. В тех случаях, когда для столбца определен тип данных char, данные следует помещать в одинарных кавычках, как показано в следующем примере:

UPDATE.....
SET.....
WHERE.....

Как отмечалось в статье “Работа с символьными данными”, помещенной в майском номере журнала, можно выбрать символьный тип данных либо фиксированной длины, char, либо переменной длины, varchar. Фиксированный размер оказывается предпочтительным в тех случаях, когда данные имеют одинаковую или сходную длину, например, при вводе идентификатора автора (часто в этом качестве используют индивидуальный номер системы социальной безопасности, что, кстати, является плохим примером для подражания). В большинстве ситуаций применение переменной длины данных не приводит к сколько-нибудь заметному увеличению времени обработки. В то же время фамилия автора может быть очень длинной, так что использование типа varchar оказывается вполне оправданным. Применительно к подавляющему большинству фамилий фиксированная длина поля означает потерю значительного объема памяти, поэтому лучше использовать тип данных varchar. При выборе того или иного типа данных всегда следует искать компромисс с учетом двух аспектов: с одной стороны, потери полезного объема памяти при использовании данных фиксированной длины, а с другой стороны, увеличения времени обработки в случае применения данных переменной длины.

SQL Server 7.0 поддерживает набор символов Unicode. В связи с этим, чтобы воспользоваться всеми преимуществами, предоставляемыми расширенными возможностями Unicode, необходимо было ввести дополнительный тип данных.Если вам захочется использовать символьные данные Unicode, то следует указать тип данных Nchar или, если это информация переменной длины, то Nvarchar. При вводе данных Unicode их следует заключать в одиночные кавычки, причем непосредственно перед ними необходимо поставить заглавную латинскую букву N. Если в рассмотренном ранее примере имя автора отнесено к типу данных Unicode, то предыдущий оператор обновления примет следующий вид:

UPDATE. ....
SET.....
WHERE.....

Ограничение максимальной длины информации при работе с типом данных Unicode составляет 4000 знаков. Это объясняется тем, что для хранения каждого символа Unicode требуется два байта памяти. Поэтому на стандартную страницу памяти размером 8К можно поместить в два раза меньше символов Unicode, чем при использовании обычных символов.

Базовый тип целых чисел integer охватывает диапазон от -2 147 483 638 до 2 147 483 647. Уменьшенные целые smallint включают числа от -32 768 до 32767. Зачастую, когда точно известно, что диапазон возможных числовых значений данных невелик, лучше применять тип данных smallint. К примеру, в базе данных личной коллекции компакт-дисков при выборе типа данных для первичного ключа целесообразно использовать тип данных smallint. Ведь предположение о том, что число компакт-дисков в такой коллекции превысит 32 676 единиц, кажется неправдоподобным. В этой ситуации не следует для оптимизации памяти использовать тип данных tinyint, поскольку он позволяет обрабатывать только значения от 0 до 255. Такой тип данных можно было бы применить для нумерации депозитных сертификатов, а для коллекции компакт-дисков он может оказаться недостаточным.

Если приложение таково, что необходимо получать из базы данных числовое значение в строго указанном формате, то для этого следует выбрать один из точных числовых типов данных. Существуют два точных числовых типа данных: десятичный (decimal) и числовой (numeric), которые по существу совпадают друг с другом. Для них можно задать требуемые точность p и масштаб s в формате decimal (p,s). Точность представляет собой число значащих символов по обе стороны от десятичной запятой, а масштаб – количество символов справа от нее. Например, число 123,4567 можно хранить в столбце, для которого тип данных задан в виде (7,4). Если число, которое должно быть помещено в столбец с точным числовым типом данных, содержит больше десятичных знаков, чем указано в типе данных, то такое число округляется до требуемой точности. Числовые типы данных могут использовать для хранения значений от 2 до 17 байтов.

Некоторые числа нельзя точно представить в десятичном виде с ограниченным числом знаков, например, одну треть или число пи. Для записи таких чисел используются действительный (real) или плавающий (float) типы данных. Данные действительного типа хранятся с точностью от 1 до 7 знаков. Плавающий формат, который иногда называют еще форматом двойной точности, может хранить числа, содержащие от 8 до 15 значащих цифр. Действительный и плавающий типы данных применяются в научных приложениях для хранения чисел, не требующих точного двоичного выражения. Одна-две последние цифры могут не вполне точно сохраняться при преобразованиях в двоичный формат. Поэтому такие числа не следует использовать в операциях точного сравнения, применяемых для формулирования условий оборота WHERE.

Предположим, что в базе данных необходимо хранить двоичную информацию. В этой ситуации имеется выбор между двумя форматами представления: c фиксированной или переменной длиной. Данным фиксированной длины соответствует тип данных binary, а двоичным данным переменной длины соответствует тип данных varbinary.

Для представления денежных значений используются два типа данных: денежный (money) и малый денежный (smallmoney). Тип данных денежный применяется для хранения значений от плюс до минус 922 триллионов. Большинство из нас вполне может пользоваться малым денежным типом данных, который перекрывает диапазон значений от -214 748,3648 до +214 748,3647. По существующей договоренности денежный тип данных при хранении имеет четыре десятичных знака после запятой, а для его представления пользователям требуется только два знака . Отметим, что многие финансовые транзакции не используют денежный тип данных. Например, в биржевыех торговых операциях применяются 1/32 доли, для хранения которых необходимо пять десятичных мест.

В SQL Server и дата и время хранятся в одном столбце, так что если с помощью функции GETDATE() запросить текущую дату, то при этом система сообщит и время. Для дат применяются два типа данных, datetime и smalldatetime. Тип данных smalldatetime охватывает период времени от 1 января 1900 года до 6 июня 2079 года и включает время с точностью до минуты. Такого диапазона достаточно для подавляющего большинства проектов. Тип данных datetime годен для использования до 31 декабря 9999 года (это следует учитывать при решении проблемы 10К года). Начало диапазона этого типа данных датируется 1 января 1753 года. Почему 1753? Это связано с переходом с юлианского на грегорианский календарь. Несмотря на то, что грегорианский календарь был предложен некоторое время назад, процесс его принятия продолжался в течение приблизительно 30 лет. На протяжении этого периода некоторые страны уже приняли грегорианский, а другие еще нет. Поэтому для того, чтобы дата воспринималась однозначно, надо знать географическое положение объекта. Кроме того, год начинался не 1 января, а 1 марта. Поэтому такая дата, как 15 января 1792 года, может интерпретироваться и как середина первого месяца 1492 года, и как середина 11-го месяца 1793 года. Создатели SQL Server решили не рисковать, и поэтому приняли решение не воспринимать даты, относящиеся к периоду времени до начала 1753 года. Следует отметить также, что тип данных datetime показывает тысячные доли секунды, хотя точность гарантируется только до 1/300 части секунды.

Для символьных данных длиннее, чем 255 знаков, в SQL Server 6.5 следует применять тип данных текст (text). В SQL Server 7.0 граница применимости этого типа данных отодвигается до 8000 знаков. Для больших двоичных объектов (BLOB), таких как цифровые образы, используется тип данных образ (image). ?анные типа текст или образ не хранятся в строках, поэтому к ним не применимо ограничение на размер страницы памяти. В строках хранятся лишь указатели на страницы базы данных, в которых находится информация. Для обновления этих типов данных необходимы специальные процедуры, которые выходят за рамки рассмотрения настоящей статьи. (Более подробно об этом написано в статье Майкла Оути “Нам не страшен огромный BLOB”, опубликованной в апрельском номере журнала.) Здесь необходимо отметить только то, что изменения текстовых данных или образов не фиксируются в журнале, а указатели не обновляются. Изменяются только сами поля, содержащие текст или образ.

Некоторые типы данных трудно отнести к какой-либо категории. Один из таких типов – битовые данные (bit). Это целое число, которое может принимать только два значения – 0 и 1 (в одном байте можно хранить восемь подобных величин). Битовые значения часто применяются в качестве флагов, принимающих значения истина или ложь. Их можно использовать, например, для хранения сведений о том, заключен ли контракт с автором, или принадлежат ли его книги к бестселлерам, или для чего-либо аналогичного. Одно незначительнгое отличие версии SQL Server 7.0 состоит в том, что для столбцов с битовыми данными теперь разрешены и неопределенные значения, в то время как в версии SQL Server 6.5 допустимы были только значения 0 и 1.

Для внутренних целей в SQL Server используется тип данных метка времени (timestamp). Этот тип данных генерирует уникальное значение, которое обновляется каждый раз, когда модифицируется информация в строке таблицы. Метки времени являются внутренними значениями, поддерживаемыми в SQL Server. Они не соответствуют реальным датам и времени.

В SQL Server 7.0 введены два новых типа данных, которые более подробно будут рассмотрены в последующих публикациях. тип данных уникальный идентификатор (uniqueidentifier) позволяет присвоить столбцу уникальное в глобальном масштабе значение. Глобальная уникальность означает неповторимость не только в рамках конкретной базы данных или в пределах одного компьютера, но вообще везде. Этот тип данных играет важную роль при работе с хранилищами данных, когда информация собирается в него из множества разнообразных источников. Тип данных курсор (cursor) применяется для переменных курсора. Использование курсора – отдельная большая тема, которой автор собирается посвятить целую статью.

SQL Server позволяет пользователям определять собственные типы данных, которые являются комбинацией системных типов данных. Как правило, они базируются на системном типе данных определенной длины (имеются в виду числовые и символьные значения), для которого назначаются правила и значения по умолчанию. Например, можно определить тип данных Почтовый индекс как char(10), а тип данных Телефонный номер как char(14). Тогда тип данных Почтовый индекс будет гарантировать целостность форматов почтовых индексов во всех столбцах, для любого клиента, поставщика, служащего или контактного лица где угодно по всему миру.

Но в тех случаях, когда пользователь хочет создать тип данных, имея лишь набросок желаемого, SQL Server оказывается не слишком полезным. К примеру, нельзя создать новый тип данных, обладающий целым набором связанных с ним свойств, для таких понятий как широта или долгота для географических приложений. Ведь для него пришлось бы прибегнуть к методам сферической тригонометрии для вычисления расстояния между двумя точками. Возможно, когда-нибудь SQL Server станет настолько гибким, что сможет помочь и в таких ситуациях.

На данный момент добавлять новые типы данных можно с помощью SQL Server Enterprise Manager или из анализатора запросов Query Analyzer (в версии SQL Server 6. 5 это производится из окна ISQL/w). Каждый тип данных, который добавляют пользователи, действует только в пределах конкретной базы данных. Если же необходимо создать тип данных для всех баз, то его следует поместить в базу данных моделей Model. С момента создания в этой базе данных новый тип данных будет доступен во всех остальных базах. Существует другой способ решения этой проблемы – написать сценарий или сгенерировать его с помощью утилиты генерации сценариев Generate SQL Script, входящей в состав SQL Server. Тогда этот сценарий можно будет запускать из любой базы данных. В Enterprise Manager следует дважды щелкнуть правой кнопкой мыши на названии базы данных, а затем последовательно выбрать из меню Все задачи (All tasks), Генерировать сценарий SQL (Generate SQL Script) и наконец, выбрать пункт создания сценария для всех типов данных.

В окне Enterprise Manager следует выбрать пункт Базы данных (Databases), выбрать конкретную базу из списка, а затем перейти к пункту Определяемые пользователем типы данных (User-Defined Data Types). Щелкните правой кнопкой мыши и выберите пункт Свойства новых определяемых пользователем типов данных (New User-defined Datatype Properties). После этого приступайте к определению типа данных.

Как принято в SQL Server, добавить новый тип данных можно также с помощью анализатора запросов Query Analyzer. Обратите внимание на то, что кавычки заключают название системного типа данных, но вокруг названия вновь создаваемого типа данных их не ставят. Кроме того, полезно сразу указать, допускает ли создаваемый тип данных неопределенные значения. Для конкретного столбца можно будет в последующем переопределить эту установку, но первоначальная спецификация допустимых возможностей облегчает введение стандартов. А это и является той целью, ради которой вводятся новые типы данных.

При определении типов данных оператор создания таблицы может выглядеть так, как показано на листинге 2. Для тех столбцов, к которым применяются определенные пользователем типы данных, не требуется указывать длину помещаемых в него сведений, – ведь она уже была определена при создании типа данных. Можно также не сообщать системе о том, допустимы ли в рассматриваемом столбце неопределенные значения, поскольку это задано в спецификации типа данных. Хотя не повредит включить такое упоминание и в этот оператор.

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

Введение определяемых пользователем типов данных является одним из способов обеспечения целостности информации в различных приложениях, над которыми трудятся разные команды разработчиков. При этом предполагается , что все они используют SQL Server. Однако при перенесении кода SQL в другие СУБД целесообразно избегать применения определяемых пользователем типов данных.

Майкл Д. Рейли ([email protected]) является одним из основателей и вице президентом компании Mount Vernon Data Systems, которая занимается консалтингом по Windows NT и SMS, а также разработкой приложений,широко использующих базы данных. Он обладает сертификатами MCSE и MCT по Windows NT, SQL Server и SMS.

au_id varchar(11) NOT NULL ,
aulname varchar (40) NOT NULL ,
au_fname varchar (20) NOT NULL ,
phone char (12) NOT NULL ,
address varchar (40) NULL ,
city varchar (20) NULL ,
state char (2) NULL ,
zip char (5) NULL ,
contract bit NOT NULL)
SP_ADDTYPE id, `char(11)`, `not null`
GO
SP_ADDTYPE phonenumber, `char(12)`, `not null`
GO
SP_ADDTYPE statecode, `char(2)`, `null`
GO
SP_ADDTYPE zipcode, `char(10)`, `null`
GO
CREATE TABLE dbo. authors (
     au_id id NOT NULL ,
     au_lname varchar (40) NOT NULL ,
     au_fname varchar (20) NOT NULL ,
     phone phonenumber(12) ,
     address varchar (40) NULL ,
     city varchar (20) NULL ,
     state statecode,
     zip zipcode,
     contract bit NOT NULL )

sql server 2005 – какой тип данных использовать для хранения мобильного номера

спросил

Изменено
5 лет, 11 месяцев назад

Просмотрено
91к раз

Какой тип данных я должен использовать для хранения мобильных номеров из 10 цифр (пример: 9932234242). Должен ли я пойти на varchar (10) или на большой – «большой».

Если число имеет тип ‘0021-23141231’, то какой тип данных использовать?

  • sql-server-2005
  • sql-server-2008
  • sql-server-express
  • sqldatatypes

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

Кроме того, в вашем примере учитывали ли вы, что произойдет, если вы сохраните 002123141231 в 90-9]%’ )

Формат

  • в клиенте для каждого региона (Великобритания = 07123 456 789 , Швейцария = 071 234 56 78 )
  • 0

    Используйте varchar с ограничением проверки, чтобы убедиться, что разрешены только цифры.

    Примерно так:

     создать таблицу MyTable
    (
        Номер телефона varchar(10)
            проверка ограничения CK_MyTable_PhoneNumber (телефонный номер вроде '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
    )
     

    , если это всегда одинаковая длина, вы можете вместо этого использовать char .

    2

    varchar(50) подходит для типа данных мобильного номера. потому что иногда он может содержать код страны, например +91, или пробелы. Для сравнения мы можем удалить все специальные символы с обеих сторон выражения.

    Зарегистрируйтесь или войдите в систему

    Зарегистрируйтесь с помощью Google

    Зарегистрироваться через Facebook

    Зарегистрируйтесь, используя адрес электронной почты и пароль

    Опубликовать как гость

    Электронная почта

    Требуется, но не отображается

    Опубликовать как гость

    Электронная почта

    Требуется, но не отображается

    mysql – Тип данных для номера телефона: VARCHAR, INT или BIGINT?

    спросил

    Изменено
    5 лет, 11 месяцев назад

    Просмотрено
    120 тысяч раз

    Итак, это будет фиктивный вопрос года, но я должен задать его, так как я не в первый раз сталкиваюсь с этим. Взгляните на следующее определение таблицы:

    Взгляните на столбец from_number , который прямо сейчас является VARCHAR(45) , но он будет содержать номер телефона. Поскольку я не знаю, сколько номеров может быть у телефона по всему миру, я пытаюсь охватить почти все из них. Я хочу максимально сохранить целостность базы данных, поэтому я думаю, что VARCHAR не является подходящим типом для хранения такого рода информации – может быть, я ошибаюсь, скажите вы мне – поэтому я думаю о замене на INT или даже BIGINT .

    Когда я определяю столбец в Workbench, я должен указывать число в скобках () не во всех случаях, но в тех, о которых я упоминал ранее, я должен был. Итак, если я сделаю это: BIGINT() , я получу эту ошибку:

    Что поможет мне немного прочитать об этом типе MySQL здесь. В основном информация такая:

    Большое целое число. … Диапазон без знака: от 0 до 18446744073709551615.

    Что заставляет меня спросить: какое значение я должен установить для круглых скобок, когда я определяю тип BIGINT() . (Я использую BIGINT, потому что не знаю, может ли INT хранить столько номеров, сколько может иметь телефон – возможно, я тоже ошибаюсь). Как правильно создать столбец в базах данных MariaDB/MySQL?

    В любом случае хотелось бы узнать ваше мнение, опыт и конечно получить ответ

    Примечание: Я использую последнюю версию MySQL Workbench для создания диаграммы ER. Я также использую MariaDB 10.0.x

    • mysql
    • mariadb
    • типы данных

    1

    Как бы вы поступили с телефонным номером с расширением, например “+1-000-000-0000 доб 1234”?

    Обратите внимание, “+” указывает на необходимость применения правил международного набора; поэтому из Северной Америки система автоматически узнает «011» перед международными вызовами и т. д.

    А как насчет таких телефонных номеров, как “1-800-DBA-HELP”?

    Я обычно сохраняю номера телефонов в виде текста. Сказав это, это действительно зависит от того, насколько критичен ваш столбец с номером телефона. Если вы запускаете автоматические дозвонщики из этого столбца, вам действительно нужно убедиться, что включены только цифры, а данные представляют собой правильно сформированные телефонные номера.

    У вас могут быть отдельные столбцы для добавочных номеров и телефонных номеров с текстом, как в приведенном мной примере «1-800-DBA-HELP».

    7

    Ранее было написано:

    «С помощью MariaDB вы можете использовать вычисляемое поле для извлечения только цифр для автоматического набора номера. Также работает для MySQL 5.7».

    В ответ на вопрос ОП об этом («не могли бы вы немного объяснить, что вы мне говорите?»), Вот объяснение.

    Многие системы баз данных теперь имеют эту функцию. Это поля, известные по-разному как “ вычислил “, “ виртуальный ” или “ сгенерировал “, которые получены из значений в других полях. Мощность этой функции будет варьироваться в зависимости от вашей СУБД. Я знаю, что Oracle, Firebird, MariaDB и теперь MySQL 5.7 имеют Другие, вероятно, тоже. ) фамилия как все заглавные, что облегчает поиск. Таким образом, вам нужно искать только на CAP s (используя, скажем, LIKE ), зная, что данные, которые ищутся в [ вычислено | виртуальный | сгенерировано ] поле написано заглавными буквами.

    Концепция MySQL 5.7 объясняется здесь и здесь. Это было в MariaDB немного дольше, и концепция также объясняется здесь. Здесь предлагаются некоторые возможные варианты использования, но на самом деле вы ограничены только своим воображением. Их можно рассматривать как удобную (и менее подверженную ошибкам) ​​замену триггерам.

    В вашем конкретном случае вы можете получить набираемый номер из текстового поля “+” –> “00” (или любого другого международного телефонного кода). Просто мысль.

    1

    Хм. Телефонные номера состоят из цифр. Использование varchar позволяет пользователю сохранять любой тип форматирования, с ( или без, с – или .), и это быстро создает беспорядок с вашими данными. Формат номера телефона зависит от «страны», маска должна быть привязана к стране. Расширение является расширением и является необязательным, поэтому его следует хранить в «поле расширения» (также int).
    Для 1-800-DBA-HELP я бы преобразовал это на лету и сохранил фактическое число. Если вам действительно нужны эти удобочитаемые номера телефона, сохраните их в отдельном поле varchar.

    Я обычно храню номера телефонов в виде простого текста . Форматирование и отображение оставьте на усмотрение клиентского кода.

    Вот, более чем, как вы храните? то, что вы собираетесь делать с этим телефонным номером , действительно важно.

    Если ваша компания хочет выполнять исходящие вызовы из вашей системы, приложение будет извлекать только номера.