2015-08-12 3 views
1

Я использую joomla 3.4, и я установил компонент sh404 для sef-ссылок. Моя база данных - utf8_general_ci, и многие из моих URL-адресов кодируются url из греческого языка, что приводит к некоторым действительно длинным URL-адресам.Увеличьте длину VARCHAR или обработайте проблему с помощью php?

Сегодня я заметил, что некоторые URL-адреса были сломаны, поэтому после изучения я понял, что sh404 хранит URL-адреса в столбцах VARCHAR (255). Из-за этого некоторые URL-адреса (не многие, но достаточно для того, чтобы заметить из 200-килобайтных URL-адресов) длиннее того, что позволяет и хранится в столбце неполным. Помимо очевидной проблемы сломанных URL-адресов и ожидаемых 500 ошибок сервера и т. Д., Это приводит к тому, что один и тот же сломанный URL-адрес будет храниться повторно, так как sh404 выглядит, если он хранится перед его хранением и не находит его (как сохраненный сломан). В одном случае у меня был тот же самый url, хранящийся более 5000 раз ...

Теперь мой вопрос к вам в этом. Должен ли я просто увеличить длину VARCHAR до 500 (должно быть достаточно, чтобы держать любой URL, даже самые крайние случаи и с 40 до 50), или я должен изменить логику используемого компонента, который генерирует эти URL, путем транслитерации их, тем самым уменьшая размер ВСЕХ моих URL до более чем половины? Недостатком этого является то, что мне все равно придется выводить всю необходимую информацию на греческом языке, и для этого мне придется выполнить много str_replaces с php.

Мои URL-адреса генерируются комбинацией некоторых полей db, содержащих информацию о продукте на греческом языке. Sh404 подбирает греческие URL-адреса и транслитерирует их на английский, но исходный url становится слишком длинным. Если я изменил все поля, содержащие одну и ту же информацию, уже транслитерированную, тогда sh404 будет хранить URL-адреса уже на английском языке, но поля db также будут на английском языке, таким образом, str_replaces. Хорошо, что эти значения известны и исправлены, поэтому мне не нужны никакие preg_replaces.

Как вы думаете, лучше ли качество?

Ofcourse изменения VARCHAR 500 является намного более простым, но я не забочусь принимая долгий путь, если он собирается принести пользу моего выступления

+0

Он транслитерирует или использует punycode? – Elin

ответ

0

Зависит от verison из MySQL вы используете?

Если перед MySQL 5.0.3 ваш измененный вариант varchar до 500 не будет работать, и вам нужно пойти другим путем.

Если это версия 5.0.3 или более поздняя, ​​тогда да, то изменение varchar на 500 будет работать, и это будет иметь минимальный эффект производительности по сравнению с изменением вашей логики по всему вашему проекту.

+0

Mysql - версия 5.6.17, varchar может быть увеличена да. Ваш ответ - это музыка для моих ушей, так как это, очевидно, то, что я надеялся услышать. Однако, какой производительностью BENEFIT я могу получить, имея 200k не-sef-адресов в два раза меньше, чем они есть сейчас? Таблица 168mb в настоящий момент – sakattack

+0

Сохранение длины поля VARCHAR занимает 1 байт, если поле VARCHAR имеет максимальную длину 0-255 байт; если оно больше 255 байт, служебные данные для хранения длины составляют 2 байта. –

Смежные вопросы