我一直使用rawurlencode将用户输入的数据存储到我的mysql数据库中。我这样做的主要原因是,我找到了非常简单的外国字符。然后我使用rawurldecode来检索和显示数据。
我在某处读过rawurlencode并不是为了这个目的。我正在做什么有任何不利之处?
所以,假设我有一个带有许多字符的德语地址,例如变形金刚等。将这个存储在mysql数据库中的最简单方法是什么,没有出现错误的风险并且可以使用搜索脚本进行搜索?到目前为止,rawurelencode对我们的系统来说非常出色。也许这种做法可以通过仅编码外来字母而不是像空格等常见字符来改进,这是浪费空间我完全同意。
答案 0 :(得分:1)
当然有。
让我们从实际开始:对于大类字符,您为每个数据字节花费3个字节的存储空间。 rawurlencode
(当然还有RFC)的描述表明这些字符是
除-_ .~
之外的所有非字母数字字符
这意味着总共有26 + 26 + 10(字母数字)+4(特殊例外)= 66个字符,你不浪费空间。
然后还存在逻辑上的缺点:您不是存储数据本身,而是存储为URL定制的数据。除非数据本身是URL,否则这不是你应该做的。
答案 1 :(得分:0)
我能想到的缺点:
2012-04-20%2013%3A23%3A00
但主要的考虑因素是这种技术是完全随意和不必要的,因为MySQL存储完整的Unicode目录没有最小的问题。您还可以决定在所有字符串中交换e和o:Holle, werdl!
。您的应用程序运行正常,但不会提供任何附加价值。
更新:作为Your Common Sense points out,基本为ORDER BY
的SQL子句不再可用。并不是说国际角色会被忽视;你基本上会根据%
和十六进制字符的ASCII码得到一个任意的排序顺序。如果你不能SELECT * FROM city ORDER BY city_name
可靠,那么你的数据库就没用了。
答案 2 :(得分:0)
我正在做什么有任何不利之处?
您使用的工具不是故意的。这总是一个缺点。
一个理智的人类总是使用专门用于某项工作的工具。不是一些随机挑选的。 特别是如果正确的工具供应没有短缺。
URL 编码不适用于数据库,可以从名称中看出。对于理智的开发人员来说,这就足够了。环顾四周:找到合适的工具。
有一种称为“常识”的东西 - 在常规生活中广泛使用的东西,但由于某些原因,在php世界中总是缺席。
常识可以警告我们:如果我们使用错误的工具,它可能会破坏工作。它迟早会破坏它。无需询问某些细节 - 这是一般规则。我们正在大约5岁时学习这条规则。
为什么不在玩一些网络游戏时使用它呢?
为什么不问自己一个问题:
存储外国字符有什么问题?
urlencode使stroing外来字符变得非常简单
你遇到没有urlencode的任何困难?
虽然我觉得常识应该足以回答这个问题,但人们总是在寻找“预兆”,证明。你在这里:
数据库的工作不仅限于存储和检索数据。纯文本文件也可以处理这样的原始任务 数据操作是我们使用数据库的原因 最广泛使用的是排序和过滤。