Я кодировал php / mysql в течение многих лет в предположении, что varchar предназначался, когда вы знаете длину входной строки - например, если номера отчетов всегда состоят из 20 буквенно-цифровых символов. В качестве альтернативы я всегда думал, что Tinytext следует использовать, когда вы хотите ограничить строку от 0 до 255 байтов, но иметь переменный размер (например, поле имени пользователя).
Чтение спецификации сегодня на http://dev.mysql.com/doc/refman/5.0/en/char.html, похоже, что varchar и tinytext - это одно и то же - строка переменной длины, предел которой составляет от 0 до 255 байтов. В чем разница между ними? Каковы предполагаемые варианты использования каждого из них?
varchar
, на самом деле больше того, чем являетсяchar
.Char
выделяет столько места, сколько вы определили в своей таблице, независимо от фактической длины вашего значения.Varchar
выделяет столько места, сколько использует ваше значение, но если вы используете, например,VARCHAR(20)
, то это не правило выделения памяти, а просто ваше собственное ограничение, чтобы убедиться, что вы не получите значение, которого не ожидаете. Итак, если ваше значение - 'abcd', оно по-прежнему использует только 4 байта памяти, но если ваше значение длиннее 20 символов, БД выдаст ошибку. - person Travesty3   schedule 03.04.2013CHAR(20)
и ваше значение равно 'abcd', БД по-прежнему будет выделять 20 байт памяти, даже если вы ее не используете. Таким образом,CHAR
лучше всего, когда все значения всегда имеют одинаковую длину. - person Travesty3   schedule 03.04.2013