Main > MySQL | PHP > MySQL, Serialize и символ CR

MySQL, Serialize и символ CR

08.08.2012 0 comments » Views: 2,327

mysql

Так как я порой сталкиваюсь с редактированием большого кол-ва сайтов (сетки сайтов), то настройки этих сайтов, я разумеется не делаю вручную. Для этих целей был написан генератор, который выдает на выходе sql дамп или простыню запросов, выполнив которые я произвожу настройки сайтов, всех плагинов и т.д. Но, сегодня я столкнулся с проблемой, при подготовке шаблонов для генератора, а именно была проблема с заменами в сериализированном тексте, в котором есть переносы строк. Для многих это больная проблема, но я разобрался с ней..

Прежде всего, я сравнил визуально, посимвольно значения которые находятся в базе, со значениями которые у меня получаются после генерации sql. На первый взгляд разницы не было никакой! Тогда, я решил сделать следующее: я написал маленький скриптик, который подконнектился к базе и вытащил оттуда нужные мне значение и сравнил с тем, что были сгенерированны. На этот раз отличия были. После небольшого сравнения, я увидел что проблема в символе перевода каретки (#13 или "\r"), в моих данных он присутствовал, а в сериализированных данных нет.

После этого, я провел некоторые тесты и оказалось, что этот символ будет добавлен в любом случае, при копировании сгенерированного SQL в буфер.

Пожалуй, тут стоит заметить, что все это я делал по Windows. Для тех кто работает на *nix системах, проблема всего скорее не актуальна. Хотя кто знает..

Как же от него избавится? Конечно можно экспортировать в дамп, оставив там только нужные перевод строки. Но для моих нужд, больше подходило именно копирование. Тогда я подумал так, раз я не могу убрать перенос каретки до отправки формы ( например SQL запрос отправляет через phpMyAdmin ), а так же не могу убрать его в скриптах (лень копаться в phpMyAdmin, да и запросы бывают в несколько строк, так что убирать надо не везде), то надо сделать это во время выполнения запроса SQL сервером. Т.к. MySQL позволяет работать со строками, то мне пришлось всего лишь немного модифицировать сам запрос:

После такой модификации все стало работать вновь.

Бонусом, оставлю тут метод, который позволяет подготавливать данные для замены в сериализированных данных:

Author: | Rating: 4/5 | Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>