MySQL - в чем разница между tinytext и varchar?

Я кодировал php / mysql в течение многих лет в предположении, что varchar предназначался, когда вы знаете длину входной строки - например, если номера отчетов всегда состоят из 20 буквенно-цифровых символов. В качестве альтернативы я всегда думал, что Tinytext следует использовать, когда вы хотите ограничить строку от 0 до 255 байтов, но иметь переменный размер (например, поле имени пользователя).

Чтение спецификации сегодня на http://dev.mysql.com/doc/refman/5.0/en/char.html, похоже, что varchar и tinytext - это одно и то же - строка переменной длины, предел которой составляет от 0 до 255 байтов. В чем разница между ними? Каковы предполагаемые варианты использования каждого из них?


person CodeMoose    schedule 03.04.2013    source источник
comment
Ваше описание того, чем вы думали varchar, на самом деле больше того, чем является char. Char выделяет столько места, сколько вы определили в своей таблице, независимо от фактической длины вашего значения. Varchar выделяет столько места, сколько использует ваше значение, но если вы используете, например, VARCHAR(20), то это не правило выделения памяти, а просто ваше собственное ограничение, чтобы убедиться, что вы не получите значение, которого не ожидаете. Итак, если ваше значение - 'abcd', оно по-прежнему использует только 4 байта памяти, но если ваше значение длиннее 20 символов, БД выдаст ошибку.   -  person Travesty3    schedule 03.04.2013
comment
Если вы используете CHAR(20) и ваше значение равно 'abcd', БД по-прежнему будет выделять 20 байт памяти, даже если вы ее не используете. Таким образом, CHAR лучше всего, когда все значения всегда имеют одинаковую длину.   -  person Travesty3    schedule 03.04.2013