Работа со строками в MySQL

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

В этой заметке я расскажу об основных принципах работы со строками в MySQL.

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

Для работы со строками SQL предоставляет нам такие типы данных: 

  • char — строка, длиной 255 символов. Примечательна тем, что хранит строки фиксированной длины. Дополняется пробелами, если значение в строке меньше 255 символов.
  • varchar — строка переменной длины. В нее пробелы не добавляются, а максимальное количество символов — 65 535 (или 255 в версии MySQL ниже 5й )
  • text — позволяет хранить большие строки. MySQL имеет несколько текстовых типов: tinytext, text, mediumtext, longtext Максимальное значение составляет 4 гб. 4 гигабайта текста, Карл

Как создавать строки

Ну здесь все просто. Для создания строки потребуется обернуть ее в кавычки вот так:

INSERT INTO table_name SET text_field = 'Эта строка будет сохранена в базе';

Если в строке уже есть кавычки — их необходимо экранировать:

  1. С помошью кавычки
  2. При помощи обратного слеша
INSERT INTO table_name SET text_field = 'Мамо, я з''їв твою шоколадку';
INSERT INTO table_name SET text_field = 'Мамо, я з\'їв твою шоколадку';

Создавая строку типа varchar следует знать о том, что MySQL обрежет символы в строке в том случае, если их количество будет большим чем строка может сохранить. Результатом такого запроса будет предупреждение (Data truncated for column ‘название колонки’ at row 1). Запрос будет выполнен успешно, но данные в ячейке не будут актуальными. 
Для того, чтобы эффективно работать с таким типом следует установить максимальное количество символов достаточным для выполнения Ваших операций. 

Как достать экранированные данные из MySQL

Как сохранить строку мы разобрались. Сейчас самый момент рассказать о функции QUOTE, которая достанет строку из базы данных. 

QUOTE — функция MySQL, которая помещает строку в кавычки, а так-же добавляет знаки экранирования символа к любому апострофу / одинарной кавычке внутри строки

Пример работы функции QUOTE:

SELECT QUOTE(text_fld), QUOTE(text_fld) FROM table_name;
QUOTE(text_fld)
text_fld
‘Мамо, я з\’їв твою шоколадку’ Мамо, я з’їв твою шоколадку   

Строковые функции

Строковые функции можно поделить на две группы: функции, которые возвращают числовые значение и строковые.

Строковые функции, которые возвращают числовое значение: 

ФункцияОписаниеЧто возвращает
LENGTHВозвращает число байтов для строки. Для типа char будет посчитано количество символов, не считая пробелы. MySQL удаляет пробелы в конце.

Пример использования:

Получить количество символов
SELECT LENGTH(‘просто строка’);
число, количество байтов
CHAR_LENGTHВ отличии от LENGTH — вернет количество символов в строке, которую ей передали

Данная функция может посчитать сколько символов содержит строка не зависимо от кодировки.

SELECT CHAR_LENGTH(‘просто строка’);
число, количествосимволов
POSITIONВозвращает местоположение подстроки в строке. Поиск начинается с первого символа. 

Пример использования:
Получить местоположение вхождения подстроки «строка» в строку
SELECT POSITION(‘ого’ IN ‘ого какая мерзость’); 
Пример вернет 1, поиск начинается с первого символа.
число, местоположение подстроки. Если вхождение не найдено — 0
LOCATEАналогична POSITION, но дает возможность задать начальную позицию для поиска.
Пример использования:
SELECT LOCATE(«me», «ctrl.me.notme», 7)
Пример вернет 12, поиск начинается с седьмого символа.
число, местоположение подстроки. Если вхождение не найдено — 0
STRCMPСравнивает позиции строк. 

Пример использования: 
STRCMP(‘other’, ‘other string’)

-1 Если первая строка в порядке сортировки находится выше второй
0 Если строки одинаковы (при не учитывается регистр символов. ABC = abc)
1 Если первая строка находится ниже второй

Кроме этого в выражении SELECT разрешается использовать операторы LIKE & REGEXP, которые возвращают числовое значение 
1 — если строка соответсвует условию
0 — не соответсвует условию

Строковые функции, которые возвращают строчное значение: 

Таких функций много, и они слегка специфичны, по этому приведу примеры наиболее часто используемых функций:

CONCAT — обедняет все переданные ей аргументы в одну строку. Умеет преобразовывать типы из числовых / дат в строку. Пример ниже возвратит строку «СегодняЯСпал»

SELECT CONCAT('Сегодня', 'Я', 'Спал');

REPLACE — выполнит замену строки на другую строку. Принимает три значения: 
1) Строка, в которой будет проходить поиск и замена
2) Что найти
3) На что поменять

Параметры данной функции чувствительны к реестру. Abc != abc


В примере показано как изменить строку «спал» на «ел» в предложении «Сегодня я спал».

SELECT REPLACE('Сегодня я спал', 'спал', 'ел');

INSERT — втравит внутрь строки еще одну строку. Принимает такие параметры: 
1) Исходная строка
2) Номер позиции символа для начала вставки
3) Сколько символов будет заменено (если 0 — строка будет ставлена без удалений)
4) Что вставляем

В примере ниже показано как в строку «Сегодня я спал» добавить подстроку «не», вернет значение «Сегодня я не спал»

SELECT INSERT('Сегодня я спал', 10, 0, ' не');

Еще один пример покажет как изменить строчку «спал» на «ел», на выходе функция сработает так-же, как и REPLACE

SELECT INSERT('Сегодня я спал', 11, 4, 'ел');

Послесловие

Я не ставлю своей целью обучить кого-либо языку SQL. Я сам его не знаю. Эти статье скорее являются моим конспектом. Если вы хотите выучить MySQL — лучше скачайте книгу и занимайтесь по ней. Эта статья годиться только для того, чтобы освежить ваши знания в процессе работы. 

Anatolii Koziura

Антураж-куражмонтаж в мире web разработки.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *