Яка різниця між VARCHAR і CHAR в MySQL?
Я намагаюся зберігати хеші MD5.
Яка різниця між VARCHAR і CHAR в MySQL?
Я намагаюся зберігати хеші MD5.
Відповіді:
VARCHAR
є змінною довжиною.
CHAR
фіксована довжина.
Якщо ваш вміст фіксованого розміру, ви отримаєте кращу ефективність роботи CHAR
.
Для детального пояснення див. Сторінку MySQL на типи CHAR та VARCHAR (обов'язково прочитайте коментарі).
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.
ЧАР 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, якщо змінна довжина є змінною
CHAR(x)
Колонка може мати тільки точно x
символи. Стовпець може мати до символів.VARCHAR(x)
x
Оскільки ваші хеші MD5 завжди будуть однакового розміру, ви, ймовірно, повинні використовувати CHAR
.
Однак ви не повинні використовувати MD5 в першу чергу; він знає слабкі місця.
Використовуйте замість нього SHA2.
Якщо ви хешуєте паролі, вам слід використовувати bcrypt.
Яка різниця між VARCHAR і CHAR в MySQL?
До вже наданих відповідей я хочу додати, що в системах OLTP або в системах з частими оновленнями можна використовувати CHAR
навіть для стовпців змінного розміру через можливу VARCHAR
фрагментацію стовпців під час оновлень.
Я намагаюся зберігати хеші MD5.
MD5 хеш - не найкращий вибір, якщо безпека дійсно має значення. Однак, якщо ви будете використовувати будь-яку хеш-функцію, розгляньте BINARY
її замість (наприклад, MD5 створить 16-байтний хеш, тож BINARY(16)
цього буде достатньо замість CHAR(32)
32 символів, що представляють шістнадцяткові цифри. Це дозволить заощадити більше місця та мати ефективність.
Варчар обрізає пробіли, якщо введені символи коротші, ніж оголошена довжина, тоді як знаки символу не будуть. Char буде прокладати пробіли і завжди буде довжиною оголошеної довжини. З точки зору ефективності, varchar є більш спритним, оскільки він обрізає символи, щоб дозволити більше коригування. Однак якщо ви знаєте точну довжину знака, char буде виконуватись з трохи більшою швидкістю.
У більшості RDBMS сьогодні вони є синонімами. Однак для тих систем, які все ще мають відмінність, поле CHAR зберігається як стовпчик фіксованої ширини. Якщо визначити його як CHAR (10), то 10 таблиць записуються в таблицю, де "padding" (як правило, пробіли) використовується для заповнення будь-якого простору, який дані не використовують. Наприклад, збереження "bob" буде збережено як ("bob" +7 пробілів). Стовпець VARCHAR (змінний символ) призначений для зберігання даних, не витрачаючи зайвий простір, який займає стовпець CHAR.
Як завжди, Вікіпедія говорить голосніше.
CHAR - поле фіксованої довжини; VARCHAR - поле змінної довжини. Якщо ви зберігаєте рядки з дивовижною змінною довжиною, такі як імена, тоді використовуйте VARCHAR, якщо довжина завжди однакова, тоді використовуйте CHAR, оскільки вона трохи більш ефективна за розміром, а також трохи швидша.
CHAR - фіксована довжина, а VARCHAR - змінна довжина. CHAR завжди використовує однаковий обсяг пам’яті на запис, тоді як VARCHAR використовує лише необхідну кількість для зберігання фактичного тексту.
Значок - це тип даних символів фіксованої довжини, varchar - тип даних символів змінної довжини.
Оскільки char - це тип даних фіксованої довжини, розмір сховища значення char дорівнює максимальному розміру для цього стовпця. Оскільки varchar - тип даних змінної довжини, розмір зберігання значення varchar - це фактична довжина введених даних, а не максимальний розмір для цього стовпця.
Можна використовувати char, коли очікується, що записи в стовпці будуть однакового розміру. Ви можете використовувати varchar, коли очікується, що записи даних у стовпці значно відрізняються за розміром.
відповідно до книги MySQL високої продуктивності :
VARCHAR зберігає рядки символів змінної довжини і є найпоширенішим типом даних рядка. Він може вимагати менше місця для зберігання, ніж типи фіксованої довжини, оскільки він використовує лише стільки місця, скільки потрібно (тобто менше місця використовується для зберігання коротших значень). Виняток становить таблиця MyISAM, створена з ROW_FORMAT = FIXED, яка використовує фіксовану кількість місця на диску для кожного ряду і, таким чином, може витрачати місце. VARCHAR допомагає виконувати продуктивність, оскільки економить простір.
CHAR є фіксованою довжиною: MySQL завжди виділяє достатньо місця для вказаної кількості символів. Зберігаючи значення CHAR, MySQL видаляє всі пробіли. (Це також стосувалося VARCHAR у MySQL 4.1 та старіших версіях - CHAR та VAR CHAR були логічно однаковими і відрізнялися лише форматом зберігання.) Значення прокладені пробілами, необхідними для порівняння.
VARCHAR
потрібно динамічно розподіляти пам'ять як і коли потрібно, таким чином зменшуючи продуктивність на відміну від CHAR
, правда?
Char
має фіксовану довжину (підтримує 2000 символів), воно є символом типу даних
Varchar
має змінну довжину (підтримує 4000 символів)
Char або varchar - використовується для введення текстових даних, де довжина може бути вказана у дужках.
(
і )
в круглих дужках, що не дужки.
(
і )
дужки, і багато британців, мабуть, навіть не усвідомлюють, що є англійські діалекти, в яких слово "дужки" може означати розділовий знак. Необхідно зробити вагомий випадок віддати перевагу «круглим дужкам» перед «дужками» - це, мабуть, максимально чіткий варіант, коли орієнтуєтесь на міжнародну аудиторію програмістів - але це складніший випадок, ніж «дужки» просто помиляються.