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

309

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

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

  • 9
    Хэш MD5 всегда имеет 32 символа. Поэтому, чтобы максимизировать свою производительность, используйте CHAR (32), поскольку CHAR имеет фиксированную длину (более подробные сведения о различиях между CHAR и VARCHAR см. В ответах ниже).
Теги:

16 ответов

283
Лучший ответ

VARCHAR - переменная длина.

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

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

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

  • 40
    @steven: когда Анон. говорит, что ваш контент имеет фиксированный размер, это означает, что строки вашей таблицы должны содержать все поля фиксированного размера. Вы не получите никакого улучшения производительности, если будете использовать CHAR против VARCHAR в одном поле, но таблица содержит другие поля, которые являются VARCHAR.
  • 2
    тип данных char не добавляет производительности ... при выполнении запроса sql сгенерирует план выполнения. Предположим, что есть 2 столбца charcol char (2000) и VarcharCol Varchar (2000). В плане выполнения предполагаемый размер строки для столбцов типа varchar может быть недооценен. таким образом, это приводит к разливу до температуры дБ. Так что использование char хорошо для производительности
Показать ещё 4 комментария
189

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. Использует динамическое распределение памяти *.
  • 3
    Я немного удивлен, что за этот ответ проголосовали так часто. В документации по MySQL Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions.
  • 1
    не говоря уже о том, что вы можете хранить буквенно-цифровые данные в char
Показать ещё 4 комментария
100

CHAR Vs 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, если переменная длина переменной

  • 2
    Город = символ (10), улица = varchar (10), город = Пуна, улица = Оксфорд, длина (город) = 4, длина (улица) = 6
  • 0
    этот запрос (выберите длину (город), длину (улицу) из temp) дает следующий вывод в mysql 5.7 mysql> выберите длину (город), длину (улицу) из temp; + -------------- + ---------------- + | длина (город) | длина (улица) | + -------------- + ---------------- + | 4 | 6 | + -------------- + ---------------- + 1 строка в наборе (0,00 сек)
56
Столбец

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

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

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

  • 36
    Msgstr "Столбец CHAR (x) может содержать только ровно x символов." На самом деле, вы можете добавлять данные с количеством символов меньше x, но я думаю, вы имели в виду, что они всегда ЗАПИСЫВАЮТ на 10 символов памяти за кулисами.
  • 9
    Вы не знаете, почему они хранят хэши md5, есть много, много веских причин использовать md5, которые не имеют ничего общего с безопасностью. Столкновения не распространены вообще, и алгоритм работает быстрее, чем более безопасные.
Показать ещё 1 комментарий
8

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

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

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

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

  • 0
    Следуя этой последовательности мыслей, я бы использовал CHAR для бизнес-идентификаторов, которые предназначены для удобства чтения и эффективности. Я все еще использовал бы первичные ключи bigint все же.
8

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

Чтобы узнать подробности об этом, проверьте:

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

  • 0
    Ссылка в ответе мертва - домен для продажи.
5

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

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

4

Ниже приведены различия между CHAR и VARCHAR:

  • CHAR и типы VARCHAR отличаются хранением и поиском.
  • CHAR Длина столбца фиксируется на длину, объявленную при создании таблицы. Значение длины колеблется от 1 до 255.
  • Когда значения CHAR сохраняются, они правильно дополняются пробелами до определенной длины. Промежуточные пробелы удаляются при извлечении значений CHAR.
4

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

  • 0
    В вашем посте есть небольшая опечатка, что делает его противоречием.
2

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

2

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

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

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

1

CHAR против VARCHAR

CHAR тип данных:

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

DECLARE @string CHAR (20)
SET @string = 'Vicky'
SELECT @string AS 'String', DATALENGTH (@string) AS 'Datalength', LEN (@string) AS 'Len'

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

Тип данных VARCHAR:

Это тип данных переменной длины DECLARE @string VARCHAR (20)
SET @string = 'Vicky'
SELECT @string AS 'String', DATALENGTH (@string) AS 'Datalength', LEN (@string) AS 'Len'

Как вы можете видеть выше, он показывает DATALENGTH как 5, что означает, что он будет использовать только количество байтов, равное количеству символов. Это позволит мне избежать потери пространства базы данных.

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

0

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

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

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

-3

Char имеет фиксированную длину (поддерживает 2000 символов), он обозначает символ - тип данных

Varchar имеет переменную длину (поддерживает 4000 символов)

  • 0
    -1; эти цифры не верны для MySQL. (Я думаю, что они могут быть для Oracle?)
-5

Char или varchar- используется для ввода текстовых данных, где длина может быть указана в скобках Eg-name char (20)

  • 0
    Это не относится к первоначальному вопросу. OP задает вопрос о практических различиях между типами, а не о синтаксисе и назначении типов. Также ( и ) это скобки, а не скобки.
  • 0
    @ 2mac ваше последнее предложение верно только для американского английского; в Британии мы называем ( и ) скобками, и многие британцы, вероятно, даже не понимают, что существуют диалекты английского языка, в которых слово «круглые скобки» может относиться к знаку препинания. Есть веские аргументы в пользу предпочтения «круглых скобок» «скобкам» - это, пожалуй, максимально понятный вариант при таргетинге на международную аудиторию программистов - но это более сложный случай, чем «квадратные скобки», которые просто ошибочны.
-9

CHAR:

  • Поддерживает символы и цифры.
  • Поддерживает 2000 символов.
  • Фиксированная длина.

VARCHAR:

  • Поддерживает символы и цифры.
  • Поддерживает 4000 символов.
  • Переменная длина.

любые комментарии......!!!!

  • 8
    Ваши цифры неверны

Ещё вопросы

Сообщество Overcoder
Наверх
Меню