Апр 28

Во многих веб приложениях необходимо хранить разнообразные настройки. Например, настройки почтовых рассылок в социальных сетях или на форуме. С точки зрения хранения данных одним из распространенных способов является сохранение настроек в поле типа 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 доступен для просмотра всем.

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

Окт 22

Очень часто разработчик встречается с проблемой неверного отображения символов на странице (всегда используйте только UTF-8!). Причин тому может быть несколько. В общем случае на это влияют следующие факторы:

Проблемы с базой данных

1) База должна быть создана с такими параметрами:

charset - utf8

collation - utf8_general_ci

2) Текстовые поля в таблицах также должны иметь charset  utf8 и collation  utf8_general_ci

Проблемы с кодировкой файлов

Каждый файл сохраняйте в UTF-8 кодировке (ну и с Unix переносами строк, естественно :-)

Кодировка в Symfony

В symfony все просто - в файле databases.yml указываем кодировку, например:

all:
  propel:
    class:      sfPropelDatabase
    param:
      phptype:  mysql
      host:     localhost
      database: the
      username: root
      password: 123
      encoding: utf8