Материалы. Транслитерация в MySQL 

10 лет назад

Время от времени возникает потребность выполнить транслитерацию некоторых данных, например заголовка статьи.

Зачем?

В первую очередь для того, чтобы иметь ЧПУ который и при копировании будет выглядеть читабельным, а не нагромождением кодированных символов.

Но в MySQL нету подходящей функции.

Что можно сделать?

Конечно надо написать свою функцию которая будет выполнять транслитерацию. Для этого придётся вызвать функцию REPLACE, для каждой преобразуемой буквы.

Код функции будет выглядеть примерно так:

 
CREATE FUNCTION `translit`(`_txt` TEXT) 
RETURNS text 
BEGIN 
  SET _txt=REPLACE(REPLACE(REPLACE(_txt /* И так далее, для каждого символа */,'В','V'),'Б','B'),'А','A'); 
  RETURN _txt; 
END 

Это удобно, для написал и забыл. Но когда потребуется вносить изменения, может оказаться трудно. Поэтому если скорость выполнения не критична, можно решить задачу чуть-чуть медленным способом, но при этом повышается легкость настройки преобразований.

Для этих целей создадим таблицу с преобразованиями (Исходный символ; Конечные символы) и функцию, которая будет проходить по всем значениям из таблицы и выполнять последовательные преобразования с учётом пар значений из таблицы.

Пример таблицы и функции прилагается в присоединенном к записи скрипте.

Такой метод удобен при сохранении данных в транслите в таблице, при добавлении или обновлении записей. Как автоматизировать процесс сохранения транслитерированных данных при изменении основного поля в таблице будет рассмотрено в следующих записях.

Присоединенный файлы: