首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Char函数替换MySQL

用Char函数替换MySQL
EN

Stack Overflow用户
提问于 2012-12-26 17:15:59
回答 1查看 2.4K关注 0票数 3

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

我目前的代码是:

代码语言:javascript
复制
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)部分。

代码语言:javascript
复制
SELECT urlParser('aäeucn');

返回

代码语言:javascript
复制
aäeucn

如果我将代码更改为

代码语言:javascript
复制
SET parsedString    =   REPLACE (parsedString, 'ä', 'a');

不知怎的,它起作用了,又回来了。

代码语言:javascript
复制
aaeucn

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

EN

回答 1

Stack Overflow用户

发布于 2012-12-26 17:27:14

你可以试试

代码语言:javascript
复制
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

代码语言:javascript
复制
$addr = strtr($addr, "äåö", "aao"); // That was easy!

与MySQL存储的函数相比,该解决方案编写起来要快得多,也容易得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14043815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档