2010-04-07 114 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