增加 VARCHAR 长度或使用 php 处理问题?

Increase VARCHAR length or handle the issue with php?

我使用的是 joomla 3.4,我已经为 sef urls 安装了 sh404 组件。我的数据库是 utf8_general_ci,我的许多 url 都是从希腊语编码的 url,这导致一些非常长的 url。

今天我注意到一些 urls 被破坏了,所以在调查之后,我意识到 sh404 将 urls 存储在 VARCHAR(255) 列中。因此,一些 urls(不多,但足以让我从 200k urls 中注意到)比列允许的长度更长并且存储不完整。除了损坏的 urls 和预期的 500 个服务器错误等明显问题外,这会导致重复存储相同的损坏 url,因为 sh404 在存储之前查看它是否已存储并且没有'找到它(因为存储的那个坏了)。在一个案例中,我将相同的 url 存储了 5000 多次......

现在我要问你的问题是这个。我应该只将 VARCHAR 长度增加到 500(应该足以容纳任何 URL,即使是我最极端的情况,还有 40 - 50 个备用),或者我应该更改我使用的生成这些的组件的逻辑urls,通过音译它们,从而将我所有 urls 的大小减少到一半以上?这样做的缺点是我仍然需要用希腊语输出所有必要的信息,为此我将不得不执行很多 str_replaces 和 php。

我的 url 是由一些包含希腊语产品信息的数据库字段组合生成的。 Sh404 选择希腊语 url 并将其音译为英语,但原始 url 变得太长了。如果我更改所有字段以包含相同的信息,已经音译,那么 sh404 将存储 urls 已经是英文的,但数据库字段也将是英文的,因此 str_replaces。好处是这些值是已知的和固定的,所以我不需要任何 preg_replaces.

您认为哪种性能更好?

当然,将 VARCHAR 更改为 500 要简单得多,但如果它对我的性能有好处,我不在乎走很长的路

取决于您使用的 mysql 是哪个版本?

如果是 MySQL 5.0.3 之前的版本,您将 varchar 更改为 500 选项将不起作用,您必须采取其他方式。

如果它是 5.0.3 或更高版本,那么是的,将 varchar 更改为 500 会起作用,并且与更改整个项目的逻辑相比,它对性能的影响非常小。