← Повернутись до блогу

Робота з рядками в MySQL

December 2018 4 хвилини на читання 175 переглядів

Як я писав раніше в цій статті, нещодавнє усвідомлення того, що робота з базою даних є моїм слабким місцем спонукало мене взятися за підручники. Для кращого запам’ятовування мені знадобиться конспект, яким і стане цей блог найближчим часом.

У цій замітці я розповім про основні принципи роботи з рядками в 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 = 'Мамо, я з\'x їв твою шоколадку';

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

Як дістати екрановані дані з MySQL

Як зберегти рядок ми розібралися. Зараз саме час розповісти про функцію QUOTE, яка витягне рядок з бази даних.

QUOTE — функція MySQL, яка поміщає рядок у лапки, а також додає знаки екранування символа до будь-якого апострофа / одинарної лапки всередині рядка

Приклад роботи функції QUOTE:

SELECT QUOTE(text_fld), QUOTE(text_fld) FROM table_name;

Строкові функції

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

Строкові функції, що повертають числове значення:

Функція Опис Що повертає
LENGTH Повертає число байтів для рядка. Для типу char буде підраховано кількість символів, не враховуючи пробіли. MySQL видаляє пробіли в кінці.

Приклад використання:
SELECT LENGTH('просто рядок');
число, кількість байтів
CHAR_LENGTH На відміну від LENGTH — поверне кількість символів у рядку, який їй передали.

Ця функція може порахувати, скільки символів містить рядок незалежно від кодування.

SELECT CHAR_LENGTH('просто рядок');
число, кількість символів
POSITION Повертає місцезнаходження підрядка в рядку. Пошук починається з першого символу.

Приклад використання:
SELECT POSITION('ого' IN 'ого яка мерзота');
Приклад поверне 1, пошук починається з першого символу.
число, місцезнаходження підрядка. Якщо входження не знайдено — 0
LOCATE Аналогічна POSITION, але дає можливість задати initial 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 — краще завантажте книгу і займайтеся за нею. Ця стаття придатна лише для того, щоб освіжити ваші знання в процесі роботи.

2018–2025 (c) Списуй але не один в один