mysql:实现函数进入查询

时间:2011-05-16 22:35:55

标签: mysql diacritics querying

我有一个存储地理数据的数据库,如国家,城市。 我想使用modrewrite与链接,如: mysite.com/europe/austria/vienna

现在的问题是:在德国,一些国家包含像奥地利=österreich这样的变音符号 (我不能在网址中使用变音符号)

所以我的问题: 有没有办法在数据库中创建一个函数,在查询时替换所有特殊字符,如“where validUrl(country)='oesterreich'? 这将取代ö-> oe

到目前为止我唯一的想法是为modrewrite添加一个额外的数据库字段,它将保存“oesterreich”

任何想法?感谢

2 个答案:

答案 0 :(得分:1)

它对你没有帮助,因为虽然你可以用德语用ue取代ü,但你不能用其他语言的变音符号来做这些事情。但是,您可以对这些字符进行编码,使其在网址中有效。请参阅urlencode和urldecode。

此外,当您将列的排序规则设置为unicode_ci时,您应该能够选择相似的字符串,因此WHERE YourField = 'enquête'也应该匹配'enquete'。 'österreich'可能会匹配'osterreich'而不是'oesterreich'。 MySQL可能不够聪明,不知道这个单词是法语还是德语。

您可以选择特定的德语排序规则,但这不符合您的目标。阅读this text on collations可能仍然很有趣,因为它显示了两个德国校对之间的差异。

答案 1 :(得分:1)

您可以在MySQL中创建一个函数

DELIMITER $$

CREATE FUNCTION UmlautRaus(input varchar) RETURNS varchar
BEGIN
  declare output varchar;

  SET output = REPLACE(input,'ü','ue');
  SET output = REPLACE(output,.....
  ....
  RETURN output;
END $$

DELIMITER ;

然而正如@GolezTrol所说,由于其他语言中的变音符号,这不是一个好主意。

链接:http://dev.mysql.com/doc/refman/5.1/en/string-functions.html