типы данных mysql - PullRequest
       5

типы данных mysql

2 голосов
/ 12 января 2011

Большинство таблиц в моей базе данных содержат данные типа varchar и длины, заданные как 36, используемые для заполнения исходно созданных направляющих. Является ли varchar наиболее подходящим типом данных для хранения значений guid или любого другого типа в mysql? Пожалуйста, объясните

Ответы [ 5 ]

2 голосов
/ 12 января 2011

Вы можете проверить АНАЛИЗ ПРОЦЕДУРЫ .Это может помочь предложить подходящие типы данных, основанные на том, что уже есть в вашей таблице.

Вот сообщение в блоге , в котором также говорится о ПРОЦЕДУРЕ АНАЛИЗ, и может помочь.

1 голос
/ 13 января 2011

Все зависит от того, что вы подразумеваете под «наиболее подходящим».

Преимущества varchar (36) в простоте.Вы можете хранить GUID как есть и легко читать его обратно.

Но если вас беспокоит объем дискового пространства, занимаемого столбцом, у вас есть несколько вариантов:

varchar (36) = 37 байт char (36) = 36 байт char (32) = 32 байта (просто удалите дефисы) двоичный (16) = 16 байт (удалите дефисы и отмените код GUID, чтобы получить двоичную строку)

Так что, если вас беспокоит дисковое пространство, вы обнаружите, что двоичный файл (16) намного лучше, чем varchar (36).

Вот пример получения двоичной строки (16) из GUID вMySQL:

unhex(replace(uuid(),'-',''))
1 голос
/ 12 января 2011

Если ваш GUID всегда имеет длину 36 и не равен нулю, используйте CHAR вместо VARCHAR.Это сэкономит место, потому что VARCHAR должен хранить префикс длины для каждой строки.

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

Справочное руководство по MySQL - типы CHAR и VARCHAR

1 голос
/ 12 января 2011

Хороший вопрос. Во многих местах я видел, что они используют varchar для разных типов идентификаторов, которые выглядят как числа. Так почему бы не использовать целое число? Ну, по моему опыту, есть три основных случая:

  1. Хотя они числовые, они могут быть слишком большими. Например, вы не сможете использовать целое число (даже 64-разрядное большое целое число) для числа с 32 цифрами (максимальное значение для 64-разрядного целого числа без знака составляет 20 цифр).

  2. Некоторые номера имеют специальное форматирование. Например, номер телефона может выглядеть следующим образом: +44 (12) 3456789. Теперь очевидно, что +, (, и) не являются частью числа, и вы можете вызывать номер без них, но это обычный формат, поэтому с целочисленной переменной вы не сможете сохранить это.

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

Надеюсь, это поможет.

0 голосов
/ 12 января 2011

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

...