增加 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 会起作用,并且与更改整个项目的逻辑相比,它对性能的影响非常小。
我使用的是 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 会起作用,并且与更改整个项目的逻辑相比,它对性能的影响非常小。