0

我想将 URL 存储在我的 MySQL 数据库中。列类型是 char(255) - 在不更改数据类型的情况下不能变得更大。

由于 URL 可能超过 255 个字符,因此我需要先将其剪切,然后再存储到数据库中。
问题是 URL 可能已编码,我需要了解如何在不损坏 URL 的情况下截断它,稍后我将要对其进行解码。

我想在 255 个字符之前搜索 '%' 4 个字符。如果存在,则从那里切断。如果不是 - 从 255 字符中删除。

我错过了什么吗?有更好的方法吗?前面4个字符就够了吗?

4

5 回答 5

3

如果您关心数据大小,那么您最好的方法是硬着头皮更改架构以允许更多数据。

其他任何东西都只是一个杂物,以后(可能)会回来咬你。

于 2013-05-17T16:32:29.270 回答
1

如果您正在努力将您的 URL 放入 255 字符表列中,那么您可以考虑使用这样的URL 缩短库https ://developers.google.com/url-shortener/libraries来缩短 URL 然后存储它。

于 2013-05-17T16:35:11.863 回答
0

压缩 URL 的一个好策略是找出通用参数/编码,并用特殊字符/代码替换它们。由于 URL 是经过编码的,因此您可以安全地替换许多特殊字符。

于 2013-05-17T16:28:52.447 回答
0

URL 的任何截断都会对 URL 造成“损害”。

与其截断 URL,不如考虑不截断 URL,而是根据需要将其拆分为多行。

为此目的,这是一个简单的表格设计:

未截断网址
PK UrlId 整数
PK FragmentOrder Int
NN 片段 Varchar(255)

注意两列pk。这允许每个 url 有多个片段。

只需将 URL 拆分为 255 长度的片段(最后一个片段可能小于 255)并使用 fragmentOrder 对它们进行排序。

于 2013-05-17T16:29:18.377 回答
0

简短的回答是——不要。

这是一个非常非常糟糕的主意。您不能只用 255 个字符来表示 URL——URL 可以大到 2000 个左右字符,而不会影响浏览器的可移植性。将它们限制为 255 会损坏您的数据。

只是为了进行完整性检查——您是否使用 VARCHAR 与 CHAR(255) 测量了查询的性能?如果你还没有,你可能想要;您从固定宽度类型获得的适度性能提升很有可能不足以证明一种hacky 解决方法的合理性。

于 2013-05-17T16:37:11.230 回答