Php 用于存储数据的rawurlencode

Php 用于存储数据的rawurlencode,php,mysql,Php,Mysql,我一直使用rawurlencode将用户输入的数据存储到我的mysql数据库中。我这样做的主要原因是,我发现抚摸外国角色非常简单。然后我将使用rawurldecode来检索和显示数据 我在某个地方读到,rawurlencode并非用于此目的。我所做的有什么缺点吗 假设我有一个德语地址,上面有很多字符,比如umlauts等等。在mysql数据库中存储这个地址最简单的方法是什么,而不会出现错误,并且可以使用搜索脚本进行搜索?到目前为止,rawurelencode对我们的系统非常有用。也许这种做法可

我一直使用rawurlencode将用户输入的数据存储到我的mysql数据库中。我这样做的主要原因是,我发现抚摸外国角色非常简单。然后我将使用rawurldecode来检索和显示数据

我在某个地方读到,rawurlencode并非用于此目的。我所做的有什么缺点吗


假设我有一个德语地址,上面有很多字符,比如umlauts等等。在mysql数据库中存储这个地址最简单的方法是什么,而不会出现错误,并且可以使用搜索脚本进行搜索?到目前为止,rawurelencode对我们的系统非常有用。也许这种做法可以通过只编码外文字母而不编码空格等常见字符来改进,我完全同意这是浪费空间。

当然有

让我们从实际操作开始:对于一大类字符,每一字节的数据都要花费3字节的存储空间。
rawurlencode
(当然还有RFC)的描述说明这些字符是

所有非字母数字字符,除了-\uuz.~

这意味着总共有26+26+10(字母数字)+4(特殊例外)=66个字符,不会浪费空间

还有一些逻辑上的缺陷:您不是存储数据本身,而是根据URL定制的数据表示。除非数据本身是URL,否则这不是您应该做的。

当然有

让我们从实际操作开始:对于一大类字符,每一字节的数据都要花费3字节的存储空间。
rawurlencode
(当然还有RFC)的描述说明这些字符是

所有非字母数字字符,除了-\uuz.~

这意味着总共有26+26+10(字母数字)+4(特殊例外)=66个字符,不会浪费空间


还有一些逻辑上的缺陷:您不是存储数据本身,而是根据URL定制的数据表示。除非数据本身是URL,否则这不是您应该做的。

我可以想到的缺点:

  • 浪费磁盘空间
  • 每次读写时都浪费CPU周期编码和解码
  • 额外的复杂性(您甚至无法使用MySQL客户端检查数据)
  • 无法使用全文搜索
  • URL编码不一定是唯一的(至少有两个RFC)。它可能不会导致数据丢失,但会导致重复数据(例如,两行实际包含相同数据段的唯一索引)
  • 您可能会意外地对非字符串数据段(如日期)进行编码:
    2012-04-20%2013%3A23%3A00
但主要考虑的是,这种技术完全是任意的,没有必要的,因为MySQL在存储完整的Unicode目录时没有任何问题。您还可以决定交换所有字符串中的e和o:
Holle,werdl。你的应用程序运行正常,但不会提供任何附加值


Update:As,与
orderby
一样基本的SQL子句不再可用。这并不是说国际角色将被忽视;基本上,您将获得基于
%
的ASCII码和十六进制字符的任意排序顺序。如果您不能可靠地
按城市名称从城市顺序中选择*,
,那么您的数据库将变得无用。

我可以想到的缺点是:

  • 浪费磁盘空间
  • 每次读写时都浪费CPU周期编码和解码
  • 额外的复杂性(您甚至无法使用MySQL客户端检查数据)
  • 无法使用全文搜索
  • URL编码不一定是唯一的(至少有两个RFC)。它可能不会导致数据丢失,但会导致重复数据(例如,两行实际包含相同数据段的唯一索引)
  • 您可能会意外地对非字符串数据段(如日期)进行编码:
    2012-04-20%2013%3A23%3A00
但主要考虑的是,这种技术完全是任意的,没有必要的,因为MySQL在存储完整的Unicode目录时没有任何问题。您还可以决定交换所有字符串中的e和o:
Holle,werdl。你的应用程序运行正常,但不会提供任何附加值

Update:As,与
orderby
一样基本的SQL子句不再可用。这并不是说国际角色将被忽视;基本上,您将获得基于
%
的ASCII码和十六进制字符的任意排序顺序。如果您不能可靠地
按城市名称从城市顺序中选择*,
,则表示您的数据库已无效。

  • 我正在用叉子喝汤
  • 我在用钞票烧煤做烧烤
  • 我正在用水壶煮鸡蛋
  • 我正在用显微镜敲打钉子
我所做的有什么缺点吗

对 你不是故意使用工具的。这总是一个缺点

一个理智的人总是使用一种为特定工作而设计的工具。不是随便挑的尤其是在合适的工具供应不短缺的情况下。

URL编码不用于数据库,从名称可以看出。对于理智的开发者来说,这就是足够的理由。环顾四周:找到合适的工具

有一种东西叫做“常识”——一种在日常生活中广泛使用的东西,但由于某种原因,在php世界中总是不存在的东西。
常识可以警告我们:如果我们使用了错误的工具,它可能会破坏工作。迟早会把它弄坏的。无需询问特定的细节-这是一般规则。我们大约在5岁时就开始学习这条规则

为什么不在玩网络游戏时使用它呢