char и varchar в одной таблице

#mysql

#mysql

Вопрос:

Рассмотрим эту таблицу, где пароль имеет фиксированный размер, а длина имени пользователя варьируется. Кажется, я где-то читал, что в MySQL, если вы используете одно поле varchar в таблице, лучше использовать исключительно varchar и не смешивать поля char и varchar. Это правильно?

 create table users
(
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(100) NOT NULL, # variable length
password CHAR(60) NOT NULL, # fixed length
PRIMARY_KEY(id),
UNIQUE(username)
);
  

Комментарии:

1. Обычно я работаю с SQLServer, поэтому не могу комментировать реализацию MySQL. Однако ваш пример кажется мне странным — обычно у вас не было бы поля фиксированной длины для чего-то вроде пароля, вы обычно использовали бы поля фиксированной длины только для более коротких вещей, таких как (например) почтовый индекс. 🙂

2. @Nathan Пароли хэшируются и всегда имеют одинаковую длину.

Ответ №1:

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