Робота з рядками в 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 = 'Цей рядок буде збережений у базі';
Якщо в рядку вже є лапки — їх необхідно екранувати:
- За допомогою лапок
- За допомогою зворотного слеша
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 — виконає заміну рядка на інший рядок. Приймає три значення:
- Рядок, в якому буде проходити пошук і заміна
- Що знайти
- На що змінити
Параметри цієї функції чутливі до регістру. Abc != abc
У прикладі показано, як змінити рядок «спав» на «їв» у реченні «Сьогодні я спав»:
SELECT REPLACE('Сьогодні я спав', 'спав', 'їв');
INSERT — вставить всередину рядка ще один рядок. Приймає такі параметри:
- Вихідний рядок
- Номер позиції символу для початку вставки
- Скільки символів буде замінено (якщо 0 — рядок буде вставлено без видалень)
- Що вставляємо
У прикладі нижче показано, як у рядок «Сьогодні я спав» додати підрядок «не», поверне значення «Сьогодні я не спав»:
SELECT INSERT('Сьогодні я спав', 10, 0, ' не');
Ще один приклад покаже, як змінити рядок «спав» на «їв», на виході функція спрацює так само, як і REPLACE:
SELECT INSERT('Сьогодні я спав', 11, 4, 'їв');
Післямова
Я не ставлю собі за мету навчити когось мові SQL. Я сам її не знаю. Ці статті швидше є моїм конспектом. Якщо ви хочете вивчити MySQL — краще завантажте книгу і займайтеся за нею. Ця стаття придатна лише для того, щоб освіжити ваші знання в процесі роботи.