我尝试创建一个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使用ASCII)部分。
SELECT urlParser('aäeucn');返回
aäeucn如果我将代码更改为
SET parsedString = REPLACE (parsedString, 'ä', 'a');不知怎的,它起作用了,又回来了。
aaeucn有人知道如何使用CHAR()替换()吗?我不想指定任何可能的角色。
发布于 2012-12-26 17:27:14
你可以试试
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存储的函数相比,该解决方案编写起来要快得多,也容易得多。
https://stackoverflow.com/questions/14043815
复制相似问题