MySQL替换为Char函数

时间:2012-12-26 17:16:00

标签: mysql replace char

我尝试创建一个MySQL函数来将给定的字符串解析为我可以在URL中使用的版本。所以我必须删除一些特殊字符,并尝试使用循环来保持代码简单,而不必指定任何字符。

我目前的代码是:

DECLARE parsedString VARCHAR(255);

# convert to low chars
SET parsedString    =   CONVERT(paramString USING latin1);
SET parsedString    =   LOWER(parsedString);

# replace chars with A
SET @x = 223;

charReplaceA: WHILE @x <= 229 DO
    SET @x = @x + 1;

    SET parsedString    =   REPLACE (parsedString, CHAR(@x USING ASCII), 'a');
END WHILE charReplaceA;

# convert to utf8 and return
RETURN CONVERT(parsedString USING utf8);

如果我尝试使用我的代码,它就不起作用。不知怎的,它无法识别CHAR(@x USING ASCII)部分。

SELECT urlParser('aäeucn');

返回

aäeucn

如果我将代码更改为

SET parsedString    =   REPLACE (parsedString, 'ä', 'a');

它以某种方式起作用并返回

aaeucn

有没有人知道如何使用CHAR()使用REPLACE()?我不想指定任何可能的角色。

1 个答案:

答案 0 :(得分:0)

你可以尝试

REPLACE(CONVERT('aäeucn' USING ascii), '?', 'a')

将国际字符转换为ascii时,所有非ascii字符都由文字'?'表示字符。然后你不必进行循环(所以它可能运行得更快)。

还要考虑在URL中编码国际字符的其他方法 见http://www.w3.org/International/articles/idn-and-iri/


重新评论:

如果您需要逐个字符替换,我不会在SQL函数中执行此操作。 MySQL函数效率不高,编码和调试它们很尴尬。我建议将utf8字符串提取回应用程序并在那里进行字符转换。

您没有指定您正在使用的应用程序编程语言,但是为了它的价值,PHP支持可以用于此场景的函数strtr()。甚至有一个将i18n字符映射到手册页中的ascii字符的示例: http://php.net/strtr

$addr = strtr($addr, "äåö", "aao"); // That was easy!

该解决方案比MySQL存储功能更快更容易编码。