Mysql Character Mapping - PullRequest
       5

Mysql Character Mapping

0 голосов
/ 07 апреля 2010

Я хотел бы сопоставить иностранные символы, особенно турецкие, с их эквивалентом Latin-1 в Mysql.

Например,

Select name FROM users WHERE id = 1

Результат = Шакыр

но я бы хотел получить его как:

Cakir

или

Özel -> Ozel

Есть пара турецких символов, и все они имеют эквиваленты Latin-1. (http://webdesign.about.com/od/localization/l/blhtmlcodes-tr.htm)

Как я могу сделать это в Mysql с помощью SQL-запроса? Я также согласен с отображением вручную, поскольку этот запрос будет выполняться несколько раз в день, поэтому влияние на производительность в данный момент не имеет значения.

Заранее спасибо,

1 Ответ

0 голосов
/ 07 апреля 2010

Как я могу сделать это в Mysql с помощью SQL-запроса?

Если вам нужно указать только те несколько символов, которые обычно используются в турецком языке, тогда вы можете просто использовать (отвратительный)string replace:

SELECT
    REPLACE(REPLACE(
        REPLACE(REPLACE(
            REPLACE(REPLACE(
                REPLACE(REPLACE(
                    REPLACE(REPLACE(
                        REPLACE(REPLACE(
                            name,
                        'İ', 'I'), 'ı' 'i'),
                    'Ö', 'O'), 'ö', 'o'),
                'Ü', 'U'), 'ü', 'u'),
            'Ç', 'C'), 'ç', 'c'),
        'Ğ', 'G'), 'ğ', 'g'),
    'Ş', 'S'), 'ş', 's')
    AS name
FROM users
WHERE id=1

Вы можете поместить это в хранимую процедуру, если хотите, но на самом деле вам, вероятно, лучше делать это на надлежащем языке программирования (сценариях) вне базы данных.Вы получите лучшие инструменты для замены / перевода строк и более общие решения, чем эта.

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

...