Как заменить символ в строке MySQL

Во многих веб приложениях необходимо хранить разнообразные настройки. Например, настройки почтовых рассылок в социальных сетях или на форуме. С точки зрения хранения данных одним из распространенных способов является сохранение настроек в поле типа SET. Такой способ удобен для хранения двух состояний каждой настройки (включено/выключено). Но в некоторых случаях нужно сохранять несколько значений. Пример из социальных сетей: настройка приватности “Кто может видеть мой email?” – здесь возможны варианты:

  • все (2)
  • только мои друзья (1)
  • никто (0)

В данном случае настройки можно хранить в виде строки чисел, где каждый символ отвечает за определенный пункт настроек. Например строка “019910” – в ней первый символ отвечает за настройку “Кто может видеть мой email?”. В данном примере первый символ равен “0”, т.е. никто не может видеть email пользователя.

Ну вот, хотел написать об MySQL функции, а получилось вступление по другой теме 🙂

Перейдем к примерам работы со строками в MySQL.

MySQL предоставляет целый ряд функций для работы со строками. Для замены символа (или подстроки) используется функция INSERT:

INSERT(str, pos, len, newstr) – возвращает строку str, где подстрока, которая начинается с pos и имеет длину len, заменена строкой newstr

Пример:

SELECT INSERT(‘Zend Framework’, 1, 4, ‘Symfony’)

Такой запрос заменяет подстроку “Zend” на “Symfony” и в результате получается “Symfony Framework”.

Очень важно помнить, что в MySQL индексы строк начинаются с 1, а не с 0!

Таким образом, для замены символа в строке (на примере настроек приватности):

UPDATE users SET privacy = INSERT(privacy, 1, 1, ‘2’)

Данным запросом меням настройку приватности для email. Исходная строка принимает значение “219910” – это значит что email доступен для просмотра всем.

Кажется, пора идти домой уже… 🙂

  • Девелоперы издеваются, ну почему бы не сделать начало отсчета индекса с нуля, а не с единицы?

  • admin

    Что есть то есть 🙂

  • shunya

    Спасибо за статейку, помогла!

  • Есть ещё SQL функция REPLACE, она лучше работает)