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