Установка и настройка функции PREG_REPLACE в MySQL 5 | |
Тарас Шкоденко Source |
Недавно столнулся с обыденной задачей. Необхимо было перенести сайт со старого сервера на новый. И на старом и на новом севере был установлен MySQL версии 5. После переноса на новый сервер сайт перестал работать. Проблема оказалась в том, что не работала одна из хранимых процедур. На новом сервере не была найдена встроенная функция PREG_REPLACE. [taras@webhome ~]$ mysql -h localhost -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 2 Server version: 5.0.83 Source distribution Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> SELECT TRIM(BOTH '-' FROM PREG_REPLACE('/[s-]+/', '-', PREG_REPLACE('/&[w#]+?;|[^ws-]+/', '', LOWER("Test string & just for test!..")))); ERROR 1305 (42000): FUNCTION PREG_REPLACE does not exist Посмотрев в поисковике я обнаружил, что это не стандрартная функция MySQL. Эта функция стандартна для PHP, а в MySQL есть UDF расширение lib_mysqludf_preg, которое выполняет аналогичные задачи. Для установки этого расширения необходима библиотека PCRE: Perl-compatible regular expression library. Ее можно поставить через yum или из исходных текстов, как показано ниже: [root@webhome install]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.9.tar.gz ... [root@webhome install]# tar -xzvf prcre-7.9.tar.gz ... [root@webhome install]# cd pcre-7.9/ ... [root@webhome pcre-7.9]# ./configure ... [root@webhome pcre-7.9]# make ... [root@webhome pcre-7.9]# make install Установка самой библиотеки lib_mysqludf_preg из исходников выглядит так: [root@webhome install]# wget http://mysqludf.com/lib_mysqludf_preg/lib_mysqludf_preg-0.7.0.tar.gz ... [root@webhome install]# tar -xzvf lib_mysqludf_preg-0.7.0.tar.gz ... [root@webhome install]# cd lib_mysqludf_preg-0.7.0 ... [root@webhome lib_mysqludf_preg-0.7.0]# ./configure ... [root@webhome lib_mysqludf_preg-0.7.0]# make ... [root@webhome lib_mysqludf_preg-0.7.0]# make install ... Далее необходимо настроить MySQL. Для этого в секцию [mysqld] главного конфигурационного файла /etc/my.cnf установить значение переменной plugin_dir. В моем случае установленная библиотека lib_mysqludf_preg находится в /usr/local/lib. После сохранения изменений в конфигурации необходимо перезапустить MySQL, например так: [root@webhome lib_mysqludf_preg-0.7.0]# /etc/init.d/mysqld restart Stopping MySQL: [ OK ] Starting MySQL: [ OK ] Теперь необходимо установить функцию PREG_REPLACE, для этого в клиенте mysql необходимо выполнить команду: mysql> CREATE FUNCTION preg_replace RETURNS STRING SONAME ’lib_mysqludf_preg.so’; Query OK, 0 rows affected (0.08 sec) Теперь установленную функцию можно использовать: mysql> SELECT TRIM(BOTH ’-’ FROM PREG_REPLACE(’/[s-]+/’, ’-’, PREG_REPLACE(’/&[w#]+?;|[^ws-]+/’, ’’, LOWER(» Test string & just for test!.. «)))); +---------------------------------------------------------------------------------------------------------------------------------------------+ | TRIM(BOTH ’-’ FROM PREG_REPLACE(’/[s-]+/’, ’-’, PREG_REPLACE(’/&[w#]+?;|[^ws-]+/’, ’’, LOWER(» Test string & just for test!.. «)))) | +---------------------------------------------------------------------------------------------------------------------------------------------+ | test-string just-for-test | +---------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.03 sec)
UPD 27.05.2020: Если стоит mySQL 8+ или MariaDB, то эти UPD не нужны. https://stackoverflow.com/questions/986826/how-to-do-a-regular-expression-replace-in-mysql/9456574
|
Tweet |
Attached file | Send by E-mail Print version |