Строковый тип данных

Строковый тип данных является наиболее используемым типом данных. Благодаря ему в базе данных хранятся как текстовые, так и различные двоичные данные (например, картинки).

В MySQL он представлен следующими типами:

CHAR и VARCHAR

ТипОписаниеДиапозон символов
CHAR(X)Содержит текстовые строки. Длина фиксируемая, ее вы указываете при объявлении. В случае, если длина строки меньше указанной, она дополняются правыми пробелами до указанной длины.Длина может быть любой в диапазоне от 0 до 255
VARCHAR(X)Содержит текстовые строки. Длина строк динамическая.Длина может быть любой в диапазоне от 0 до 65,535

BINARY и VARBINARY

Типы данных BINARY и VARBINARY аналогичны VARCHAR и CHAR только они хранят двоичные строки.

ТипОписаниеДиапозон символов
BINARY(X)Содержит двоичные строки. Длина фиксируемая, ее вы указываете при объявлении.Длина может быть любой в диапазоне от 0 до 255
VARBINARY(X)Содержит двоичные строки. Длина строк динамическая.Длина может быть любой в диапазоне от 0 до 65,535

BLOB и TEXT

BLOB используется для хранения больших бинарных данных, таких как картинки. TEXT предназначен также для хранения больших данных, но текстового содержания.

Разница между ними заключается в том, что сортировки и сравнения сохраненных данных у BLOB чувствительны к регистру и не чувствительны к регистру в полях TEXT.

ТипОписаниеДиапозон символов
BLOBСодержит двоичные строки.Максимальная длина 65,535
TEXTСодержит текстовые строки.Максимальная длина 65,535

BLOB и TEXT имеют дополнительные подтипы, которые отличаются максимальным размером данных, которые можно в них хранить.

ТипДиапозон символов
TINYBLOBМаксимальная длина 255
MEDIUMBLOBМаксимальная длина 16,777,215
LONGBLOBМаксимальная длина 4,294,967,295
TINYTEXTМаксимальная длина 255
MEDIUMTEXTМаксимальная длина 16,777,215
LONGTEXTМаксимальная длина 4,294,967,295

Популярные функции для работы со строками

  • CHAR

    Функция CHAR(char1, char2, ...) принимает последовательность из ASCII-кодов и возвращает строку, созданную путем объединения соответствующих им символов.

    MySQL
    SELECT CHAR(115,113,108,45,97,99,97,100,101,109,121) as string;
    string
    sql-academy
  • CONCAT

    Функция CONCAT(str1, str2, ...) возвращает строку, созданную путем объединения всех аргументов, количество которых не ограничено. Если хотя бы один из аргументов равен NULL, возвращается значение NULL.

    MySQL
    SELECT CONCAT('sql', '-', 'academy'), CONCAT('sql', NULL);
    CONCAT('sql', '-', 'academy')CONCAT('sql', NULL)
    sql-academy<NULL>
  • INSERT

    Функция INSERT(str, pos, len, newStr) возвращает строку str, в которой подстрока, начинающаяся с позиции pos и имеющая длину len символов, заменена подстрокой newStr. Функция возвращает строку str без изменений, если значение pos находится за пределами строки.

    MySQL
    SELECT INSERT('Hello world', 5, 1, ' of the');
    SELECT INSERT('Hello world', 5, 1, ' of the')
    Hell of the world
  • INSTR

    Функция INSTR(str, substr) возвращает позицию первого вхождения подстроки substr в строку str.

    MySQL
    SELECT INSTR('sql-academy', 'academy');
    INSTR('sql-academy', 'academy')
    5
  • LENGTH

    Функция LENGTH(str) возвращает длину строки str. Данная функция может работать некорректно с многобайтными кодировками, т.к. фактически возвращается число байт в строке.

    MySQL
    SELECT LENGTH('sql-academy');
    LENGTH('sql-academy')
    11
  • LEFT, RIGHT

    Функция LEFT(str, len) возвращает len крайних левых символов строки str. В случае, если len равно 0 или NULL, возвращается пустая строка. Функция RIGHT(str, len) аналогична функции LEFT(str, len), только возвращает len крайних правых символов.

    MySQL
    SELECT LEFT('sql-academy', 3), RIGHT('sql-academy', 7);
    LEFT('sql-academy', 3)RIGHT('sql-academy', 7)
    sqlacademy
  • LOCATE

    Функция LOCATE(substr, str [,pos]) возвращает позицию первого вхождения подстроки substr в строку str. Если ни одного вхождения не найдено, возвращается 0. При наличии необязательного аргумента pos поиск начинается с позиции, указанной в этом аргументе.

    MySQL
    SELECT LOCATE('l', 'Hello world'), LOCATE('l', 'Hello world', 5);
    LOCATE('l', 'Hello world')LOCATE('l', 'Hello world', 5)
    310
  • LOWER, UPPER

    Функции LOWER(str) и UPPER(str) возвращают строку str, в которой все символы записаны соответственно в нижнем и в верхнем регистре.

    MySQL
    SELECT LOWER('Hello world'), UPPER('Hello world');
    LOWER('Hello world')UPPER('Hello world')
    hello worldHELLO WORLD
  • LPAD, RPAD

    Функция LPAD(str, len, padStr) возвращает строку str, дополненную слева строкой padStr до указанной длины len. Функция RPAD(str, len, padStr) дополняет строку справа.

    MySQL
    SELECT LPAD('9', 2, '0'), RPAD('Hello', 10, 'o');
    LPAD('9', 2, '0')RPAD('Hello', 10, 'o')
    09Helloooooo
  • LTRIM, RTRIM, TRIM

    Функция LTRIM(str) возвращает строку str, в которой удалены все пробелы с левого края. Функция RTRIM(str) удаляет пробелы с правого края.TRIM(str) совмещает эти функции.

    MySQL
    SELECT TRIM('  Hello  ');
    TRIM(' Hello ')
    Hello
  • REPEAT

    Функция REPEAT(str, count) возвращает строку, полученную из count повторений строки str.

    MySQL
    SELECT REPEAT('101', 3);
    REPEAT('101', 3);
    101101101
  • REPLACE

    Функция REPLACE(str, fromStr, toStr) возвращает строку str, в которой все подстроки fromStr заменены toStr.

    MySQL
    SELECT REPLACE('Dear msr Wilson', 'Wilson', 'Brown');
    REPLACE('Dear msr Wilson', 'Wilson', 'Brown')
    Dear msr Brown
  • REVERSE

    Функция REVERSE(str) возвращает строку str, записанную в обратном порядке.

    MySQL
    SELECT REVERSE('drawer');
    REVERSE('drawer')
    reward
  • SUBSTRING

    Функция SUBSTRING(str, pos [,len]) возвращает подстроку строки str, начинающуюся с позиции pos и имеющую длину в len символов. Если третий параметр len не указывается, то подстрока возвращается, начиная с позиции pos и до конца строки str.

    MySQL
    SELECT SUBSTRING('sql-academy', 5);
    SUBSTRING('sql-academy', 5)
    academy

Задания для самопроверки

Создание таблиц