В MySQL определены следующие строковые типы (табл. 2).
Таблица 2. Тип столбца и требуемый объем памяти
Тип столбца
Необходимый объем памяти
CHAR(M)
М байтов, 0≤М≤255
VARCHAR(M)
L+1 байтов, где L≤M и 0≤М≤65 535
BINARY (М)
М байтов, 0≤М≤255
VARBINARY(W)
L+1 байтов, где L≤М и 0≤М≤255
TINYBLOB,
TINYTEXT
L+1 байтов, где L<28
BLOB, TEXT
L+2 байтов, где L < 216
MEDIUMBLOB, MEDIUMTEXT
L +3 байтов, где L < 224
LONGBLOB, LONGTEXT
L +4 байтов, где L < 232
ENUM( 'value1 ' , 'value2 ',...)
1 или 2 байта в зависимости от числа значений (65 535 значений максимум)
SET( 'value1 ' , 'value2 ',...)
1 , 2, 3, 4 или 8 байтов в зависимости от числа значений (64 значения максимум)
Типы CHAR (строки фиксированной длины) и VARCHAR (строки произвольной длины) – это типы, предназначенные для записи коротких фрагментов текста. Длину каждого из них можно регулировать числом M. Записи в столбцы типа CHAR будут дополняться пробелами до максимальной длины. При этом длина строки не зависит от размеров данных, в то время как в столбцах с типом VARCHAR размер поля зависит от размеров данных. MySQL удаляет пробелы в конце текстовых строк у char во время извлечения и у VARCHAR во время сохранения.
Тип VARCHAR позволяет экономить память, но при хранении данных приходится указывать, сколько памяти занимает введенное значение. Это значение сервер использует для того, чтобы определить, с какой позиции начнется запись следующего значения. При записи данных типа CHAR серверу не приходится указывать в каждом поле реальную длину строки, а при извлечении данных считывать это значение для того, чтобы определить, где начнется следующее значение поля, поэтому сервер работает с такими строками быстрее, зато используется несколько больший объем памяти.
Если вы при определении таблицы зададите тип данных в поле фамилии водителя как CHAR (10), а потом попробуете ввести более длинную фамилию, то вводимый текст будет усечен до указанной в определении таблицы длины.
Тип BLOB (Binary Large Object, большой двоичный объект) используется для хранения двоичных данных.
Данные типа ENUM могут принимать одно из нескольких заранее заданных значений: ENUM (value1, value2,...). Например, предусмотрено, что в некотором столбце должен храниться ответ на вопрос, а допустимыми значениями ответа являются "да" и "нет". Тогда value1 будет "да", a value2 – "нет".
Тип SET предусматривает, что в поле одновременно может содержаться несколько из заранее заданного списка значений.