我想将 URL 存储在我的 MySQL 数据库中。列类型是 char(255) - 在不更改数据类型的情况下不能变得更大。
由于 URL 可能超过 255 个字符,因此我需要先将其剪切,然后再存储到数据库中。
问题是 URL 可能已编码,我需要了解如何在不损坏 URL 的情况下截断它,稍后我将要对其进行解码。
我想在 255 个字符之前搜索 '%' 4 个字符。如果存在,则从那里切断。如果不是 - 从 255 字符中删除。
我错过了什么吗?有更好的方法吗?前面4个字符就够了吗?
如果您关心数据大小,那么您最好的方法是硬着头皮更改架构以允许更多数据。
其他任何东西都只是一个杂物,以后(可能)会回来咬你。
如果您正在努力将您的 URL 放入 255 字符表列中,那么您可以考虑使用这样的URL 缩短库:https ://developers.google.com/url-shortener/libraries来缩短 URL 然后存储它。
压缩 URL 的一个好策略是找出通用参数/编码,并用特殊字符/代码替换它们。由于 URL 是经过编码的,因此您可以安全地替换许多特殊字符。
URL 的任何截断都会对 URL 造成“损害”。
与其截断 URL,不如考虑不截断 URL,而是根据需要将其拆分为多行。
为此目的,这是一个简单的表格设计:
未截断网址 PK UrlId 整数 PK FragmentOrder Int NN 片段 Varchar(255)
注意两列pk。这允许每个 url 有多个片段。
只需将 URL 拆分为 255 长度的片段(最后一个片段可能小于 255)并使用 fragmentOrder 对它们进行排序。
简短的回答是——不要。
这是一个非常非常糟糕的主意。您不能只用 255 个字符来表示 URL——URL 可以大到 2000 个左右字符,而不会影响浏览器的可移植性。将它们限制为 255 会损坏您的数据。
只是为了进行完整性检查——您是否使用 VARCHAR 与 CHAR(255) 测量了查询的性能?如果你还没有,你可能想要;您从固定宽度类型获得的适度性能提升很有可能不足以证明一种hacky 解决方法的合理性。