Типы данных CHAR и VARCHAR




Типы данных CHAR и VARCHAR очень схожи между собой, но различаются по способам их хранения и извлечения.

 

В столбце типа CHAR длина поля постоянна и задается при создании таблицы. Эта длина может принимать любое значение между 1 и 255. Величины типа CHAR при хранении дополняются справа пробелами до заданной длины. Эти концевые пробелы удаляются при извлечении хранимых величин.

 

Величины в столбцах VARCHAR представляют собой строки переменной длины. Так же как и для столбцов CHAR, можно задать столбец VARCHAR любой длины между 1 и 255. Однако, в противоположность CHAR, при хранении величин типа VARCHAR используется только то количество символов, которое необходимо, плюс один байт для записи длины. Хранимые величины пробелами не дополняются, наоборот, концевые пробелы при хранении удаляются.

 

Если задаваемая в столбце CHAR или VARCHAR величина превосходит максимально допустимую длину столбца, то эта величина соответствующим образом усекается.

 

Различие между этими двумя типами столбцов в представлении результата хранения величин с разной длиной строки в столбцах CHAR(4) и VARCHAR(4) проиллюстрировано следующей таблицей 4.6.

Таблица 4.6. Результат хранения величин с разной длиной строки типов Char и Varchar

Величина CHAR(4) Требуемая память VARCHAR(4) Требуемая память
'' ' ' 4 байта '' 1 байт
'ab' 'ab ' 4 байта 'ab' 3 байта
'abcd' 'abcd' 4 байта 'abcd' 5 байтов
'abcdefgh' 'abcd' 4 байта 'abcd' 5 байтов

 

 

Извлеченные из столбцов CHAR(4) и VARCHAR(4) величины в каждом случае будут одними и теми же, поскольку при извлечении концевые пробелы из столбца CHAR удаляются.

 

Если при создании таблицы не был задан атрибут BINARY для столбцов, то величины в столбцах типа CHAR и VARCHAR сортируются и сравниваются без учета регистра. При задании атрибута BINARY величины в столбце сортируются и сравниваются с учетом регистра в соответствии с порядком таблицы ASCII на том компьютере, где работает сервер MySQL.

Типы данных BLOB и TEXT

 

Тип данных BLOB представляет собой двоичный объект большого размера, который может содержать переменное количество данных. Существуют 4 модификации этого типа - TINYBLOB, BLOB, MEDIUMBLOB и LONGBLOB, отличающиеся только максимальной длиной хранимых величин.

 

Тип данных TEXT также имеет 4 модификации - TINYTEXT, TEXT, MEDIUMTEXT и LONGTEXT, соответствующие упомянутым четырем типам BLOB и имеющие те же максимальную длину и требования к объему памяти. Единственное различие между типами BLOB и TEXT состоит в том, что сортировка и сравнение данных выполняются с учетом регистра для величин BLOB и без учета регистра для величин TEXT. Другими словами, TEXT - это независимый от регистра BLOB.

 

Если размер задаваемого в столбце BLOB или TEXT значения превосходит максимально допустимую длину столбца, то это значение соответствующим образом усекается.

Тип перечисления ENUM

 

ENUM (перечисление) - это столбец, который может принимать значение из списка допустимых значений, явно перечисленных в спецификации столбца в момент создания таблицы.

 

Перечисление может иметь максимум 65535 элементов.

 

Регистр не играет роли, когда вы делаете вставку в столбец ENUM. Однако регистр значений, получаемых из этого столбца, совпадает с регистром в написании соответствующего значения, заданного во время создания таблицы.

 

Если вам нужно получить список возможных значений для столбца ENUM, вы должны вызвать SHOW COLUMNS FROM имя_таблицы LIKE имя_столбца_enum и проанализировать определение ENUM во втором столбце.

Тип множества SET

 

SET - это строковый тип, который может принимать ноль или более значений, каждое из которых должно быть выбрано из списка допустимых значений, определенных при создании таблицы. Элементы множества SET разделяются запятыми. Как следствие, сами элементы множества не могут содержать запятых.


Например, столбец, определенный как SET("один", "два") NOT NULL может принимать такие значения:

""

"один"

"два"

"один,два"

 

Множество SET может иметь максимум 64 различных элемента.

 

Оконечные пробелы удаляются из значений множества SET в момент создания таблицы.

 

Если вы вставляете в столбец SET некорректную величину, это значение будет проигнорировано.

 

Если вам нужно получить все возможные значения для столбца SET, вам следует вызвать SHOW COLUMNS FROM имя_таблицы LIKE имя_столбца_set и проанализировать SET-определение во втором столбце.

Выбор правильного типа данных в столбце

 

Для того чтобы память использовалась наиболее эффективно, всегда следует стараться применять тип данных, обеспечивающий максимальную точность. Например, для величин в диапазоне между 1 и 99999 в целочисленном столбце наилучшим типом будет MEDIUMINT UNSIGNED.

 

Часто приходится сталкиваться с такой проблемой, как точное представление денежных величин. В MySQL для представления таких величин необходимо использовать тип данных DECIMAL. Поскольку данные этого типа хранятся в виде строки, потерь в точности не происходит. А в случаях, когда точность не имеет слишком большого значения, вполне подойдет и тип данных DOUBLE.

 

Если же требуется высокая точность, всегда можно выполнить конвертирование в тип данных с фиксированной точкой. Такие данные хранятся в виде BIGINT. Это позволяет выполнять все вычисления с ними как с целыми числами, а впоследствии при необходимости результаты можно преобразовать обратно в величины с плавающей точкой.

Требования к памяти для различных типов столбцов

 

Требования к объему памяти для столбцов каждого типа, поддерживаемого MySQL, перечислены ниже по категориям.

 

Требования к памяти для числовых типов приведены в таблице 4.7

Таблица 4.7. Требования к памяти для числовых типов

Тип столбца Требуемая память
TINYINT 1 байт
SMALLINT 2 байта
MEDIUMINT 3 байта
INT 4 байта
INTEGER 4 байта
BIGINT 8 байтов
FLOAT(X) 4, если X <= 24 или 8, если 25 <= X <= 53
FLOAT 4 байта
DOUBLE 8 байтов
DOUBLE PRECISION 8 байтов
REAL 8 байтов
DECIMAL(M,D) M+2 байт, если D > 0, M+1 байт, если D = 0 (D+2, если M < D)
NUMERIC(M,D) M+2 байт, если D > 0, M+1 байт, если D = 0 (D+2, если M < D)

 

Требования к памяти для типов даты и времени приведены в таблице 4.8.

Таблица 4.8. Требования к памяти для типов даты и времени

Тип столбца Требуемая память
DATE 3 байта
DATETIME 8 байтов
TIMESTAMP 4 байта
TIME 3 байта
YEAR 1 байт

 

Требования к памяти для символьных типов приведены в таблице 4.9.

Таблица 4.9. Требования к памяти для символьных типов

Тип столбца Требуемая память
CHAR(M) M байт, 1 <= M <= 255
VARCHAR(M) L+1 байт, где L <= M и 1 <= M <= 255
TINYBLOB, TINYTEXT L+1 байт, где L < 2^8
BLOB, TEXT L+2 байт, где L < 2^16
MEDIUMBLOB, MEDIUMTEXT L+3 байт, где L < 2^24
LONGBLOB, LONGTEXT L+4 байт, где L < 2^32
ENUM('value1','value2',...) 1 или 2 байт, в зависимости от количества перечисляемых величин (максимум 65535)
SET('value1','value2',...) 1, 2, 3, 4 или 8 байт, в зависимости от количества элементов множества (максимум 64)

 

 

Ключевые слова - это слова, которые имеют специальное назначение в SQL.

Они могут быть командами, но не текстом и не именами объектов. Ключевые слова будут выделятся ЗАГЛАВНЫМИ БУКВАМИ. Путать ключевые слова и термины недопустимо.

 

 

Для SQL существуют определенные специальные термины, используемые при его описании. Среди них - запрос, предложение и предикат - важнейшие в описании и понимании языка, но не означающие что-либо самостоятельного в SQL. Команды или предложения - это инструкции, адресованные SQL базе данных. Команды состоят из одной и более отдельных логических частей, называемых предложениями.

 

Предложения начинаются ключевым словом и состоят из ключевых слов и аргументов. Например, могут встретиться предложения: "FROM Salespeople" или "WHERE city='London'".

Аргументы завершают или изменяют значение предложения. В приведенном выше примере "Salespeople" - аргумент, а "FROM" - ключевое слово предложения FROM. Аналогично, "city='London'" - аргумент предложения WHERE.

 

Объекты - это структуры в базе данных, которым даны имена, хранящиеся в памяти. Они включают в себя базовые таблицы, представления (второй тип таблиц) и индексы.

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-11-23 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: