it-roy-ru.com

В чем разница между VARCHAR и CHAR?

В чем разница между VARCHAR и CHAR в MySQL?

Я пытаюсь сохранить MD5 хэши.

308
steven

VARCHAR является переменной длины.

CHAR - фиксированная длина.

Если ваш контент имеет фиксированный размер, вы получите лучшую производительность с CHAR.

Смотрите страницу MySQL на Типы CHAR и VARCHAR для подробного объяснения (не забудьте также прочитать комментарии).

307
Anon.

CHAR

  1. Используется для хранения значения символьной строки фиксированная длина .
  2. Максимум нет. символов, которые может содержать тип данных: 255 символов .
  3. Это на 50% быстрее чем VARCHAR.
  4. Использует статическое распределение памяти .

VARCHAR

  1. Используется для хранения переменной длины буквенно-цифровых данных.
  2. Максимум, который может содержать этот тип данных, составляет до
    • Pre-MySQL 5.0.3: 255 символов .
    • Post-MySQL 5.0.3: 65 535 символов поделились для строки.
  3. Это медленнее чем CHAR.
  4. Использует динамическое распределение памяти * .
195
Rahul Bhadana

CHAR VARCHAR

CHAR используется для фиксированной переменной размера длины
VARCHAR используется для переменной длины переменной размера.

Например.

Create table temp
(City CHAR(10),
Street VARCHAR(10));

Insert into temp
values('Pune','Oxford');

select length(city), length(street) from temp;

Результат будет

length(City)          Length(street)
10                    6

Вывод: для эффективного использования дискового пространства необходимо использовать VARCHAR вместо CHAR, если переменная длина является переменной

109
P Sharma

Столбец CHAR(x) может содержать только точно x символы.
Столбец VARCHAR(x) может содержать от до x символов.

Поскольку ваши хэши MD5 всегда будут иметь одинаковый размер, вам, вероятно, следует использовать CHAR.

Тем не менее, вы не должны использовать MD5 в первую очередь; у него есть известные слабости.
Вместо этого используйте SHA2.
Если вы хэшируете пароли, вы должны использовать bcrypt.

59
SLaks

Varchar обрезает завершающие пробелы, если введенные символы короче объявленной длины, а char - нет. Char будет заполнять пробелы и всегда будет иметь длину объявленной длины. С точки зрения эффективности, varchar более искусен, так как обрезает символы, чтобы обеспечить большую адаптацию. Однако, если вы знаете точную длину символа, он будет выполняться с большей скоростью. 

Чтобы увидеть более подробную информацию об этом, проверьте:

http://www.allthingsdiscussed.com/More/Difference-between-char-and-varchar-in-mysql

8
user1445657

В чем разница между VARCHAR и CHAR в MySQL?

К уже приведенным ответам я хотел бы добавить, что в OLTP системах или в системах с частыми обновлениями рассмотрите возможность использования CHAR даже для столбцов переменного размера из-за возможной фрагментации столбцов VARCHAR во время обновлений.

Я пытаюсь сохранить MD5 хэши.

MD5-хэш не лучший выбор, если безопасность действительно имеет значение. Однако, если вы будете использовать любую хеш-функцию, рассмотрите вместо нее тип BINARY (например, MD5 будет производить 16-байтовый хеш, поэтому BINARY(16) будет достаточно вместо CHAR(32) для 32 символов, представляющих шестнадцатеричные цифры. Это позволит сэкономить больше места и повысить производительность ,.

8
Grygoriy Gonchar

В большинстве СУБД сегодня они являются синонимами. Однако для тех систем, у которых все еще есть различие, поле CHAR сохраняется как столбец фиксированной ширины. Если вы определите его как CHAR (10), то в таблицу будет записано 10 символов, где «заполнение» (обычно пробелы) используется для заполнения любого пространства, которое не используются данными. Например, сохранение «bob» будет сохранено как («bob» +7 пробелов). Столбец VARCHAR (переменный символ) предназначен для хранения данных, не тратя впустую дополнительное пространство, которое занимает столбец CHAR.

Как всегда, Википедия говорит громче.

5
mobiGeek

CHAR - поле фиксированной длины; VARCHAR - это поле переменной длины. Если вы храните строки с переменной длиной, такой как имена, то используйте VARCHAR, если длина всегда одна и та же, тогда используйте CHAR, потому что он немного более эффективен по размеру, а также немного быстрее.

4
Andrew

CHAR - фиксированная длина, а VARCHAR - переменная длина. CHAR всегда использует одинаковый объем памяти для каждой записи, тогда как VARCHAR использует только объем, необходимый для хранения фактического текста.

2
Donnie DeBoer

Char - это символьный тип данных фиксированной длины, varchar - символьный тип данных переменной длины.

Поскольку char является типом данных фиксированной длины, размер хранилища значения char равен максимальному размеру для этого столбца. Поскольку varchar - это тип данных переменной длины, размер хранилища значения varchar - это фактическая длина введенных данных, а не максимальный размер для этого столбца.

Вы можете использовать char, если ожидается, что записи данных в столбце будут одинакового размера Вы можете использовать varchar, когда ожидается, что записи данных в столбце будут значительно различаться по размеру.

2
Bob Minteer

в соответствии с высокая производительность MySQL книга: 

VARCHAR хранит символьные строки переменной длины и является наиболее распространенным типом строковых данных. Это может потребовать меньше места для хранения, чем типы фиксированной длины, потому что он использует столько места, сколько ему нужно (то есть, меньше места используется для хранения более коротких значений). Исключением является Таблица MyISAM создана с ROW_FORMAT = FIXED, которая использует фиксированное количество места на диске для каждого ряда и, таким образом, может тратить пространство. VARCHAR помогаетпроизводительность, потому что это экономит место. 

CHAR имеет фиксированную длину: MySQL всегда выделяет достаточно места для указанного количества символов. При сохранении значения CHAR MySQL удаляет все завершающие пробелы (Это также относится к VARCHAR в MySQL 4.1 и более ранних версиях - CHAR и VAR CHAR были логически идентичны и различались только по формату хранения.) Значения дополняются пробелами как нужно для сравнения.

0
Alireza Rahmani Khalili