Установка и настройка функции 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

 


Attached fileAttached file Send by E-mailSend by E-mail   Print versionPrint version
Comments(3)
utilmind utilmind
Do not use it. Upgrade to MySQL 8+ instead and use native functions, that also supports multi-byte characters.
utilmind utilmind
Об установке для Linux:
www.andrewzammit.com/blog/mysql-udf-perl-…
utilmind utilmind
Ещё об установке для Windows...

DLL-ки брать тут: www.mysqludf.org/lib_mysqludf_preg/

Описание установки PREG_REPLACE для mySQL в Windows тут: bugs.mysql.com/bug.php?id=62449
or
You may sign in using:
Enter with Facebook Enter with Google Enter with VK