2010-04-07 110 views
0

我想將外國字符,特別是土耳其字符映射到它們在Mysql中的Latin-1等效字符。Mysql字符映射

例如,

Select name FROM users WHERE id = 1 

結果= Cakir的

,但我想獲得它:

Cakir的

本頁Özel - >本頁Özel

有幾個土耳其人物,他們都有拉丁-1等值。 (http://webdesign.about.com/od/localization/l/blhtmlcodes-tr.htm

我該如何在Mysql中使用SQL查詢來做到這一點?我也可以使用手動映射,因爲這個查詢將在一天中運行幾次,所以此時性能影響並不重要。

由於提前,

+0

你爲什麼要使用mysql?爲什麼不把所有的字符都按原樣? – 2010-04-07 07:28:35

+0

我剛纔在其他評論中解釋過。在應用程序內搜索會產生問題,因爲我們需要輸入相同的字符,但不是每個人都有土耳其鍵盤,這就是原因。 – deniz 2010-04-07 09:14:42

回答

0

我如何能做到這一點在MySQL使用SQL查詢?

如果您只需要針對那些幾個字符在土耳其常用的,那麼你可以只使用一個(醜陋的)字符串替換:

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規範化來移除變音符號相當簡單。一般而言,音譯是一項棘手的且可能是語言特定的任務,對於數據庫層而言可能太難了。

+0

非常感謝,我知道如果我有機會在數據庫之外執行此操作會更好,但是此查詢將在應用程序中運行,而我無權修改輸出。再次感謝。我將創建一個存儲過程,這將會提供更好的性能,儘管如此,它仍然具有出色的性能。 – deniz 2010-04-07 09:10:45