Czy istnieje maksymalna długość ślimaka?

14

Klient właśnie utworzył post z naprawdę długim ślimakiem (90 znaków), bez znaków specjalnych (innych niż łączniki) itp.

Za każdym razem, gdy kliknięto link do tego postu, w tym linki „Podgląd” lub „Wyświetl ten post” z zaplecza administratora, wygenerowano 404.

Po ręcznym przycięciu ślimaka wszystko działało zgodnie z oczekiwaniami. Czy to „funkcja” czy „błąd”?

EDYCJA: Uwaga dla wszystkich mówiących o limitach DB.

Gdybym osiągnął limit pola DB, sam ślimak zostałby obcięty. Pomyśl o tym przez chwilę. W przypadku większości instalacji WP nazwa wp_posts.post_name to VARCHAR (200). Powiedzmy, że ktoś pisze tytuł z> 200 znakami. Co się dzieje? Ślimak zostaje obcięty do 200 znaków i przechowywany w wp_posts.post_name. To nie jest tak, że ktoś wchodzi i wpisuje pełny tytuł wpisu w pasku adresu przeglądarki, zastępując spacje myślnikami, prawda? URL jest generowany przez WordPress i pobiera adres URL z tabeli wp_posts.post_name i po prostu umieszcza go w atrybucie href tagu anchor. Więc nie będzie tam rozbieżności. Cała sprawa DB to czerwony śledź.

W każdym razie ten ślimak ma tylko 90 znaków, więc nie ma to nic wspólnego z limitami DB.

Czy są jakieś znane ograniczenia dotyczące przepisywania?

Tom Auger
źródło
1
Możesz użyć bezpłatnego narzędzia, takiego jak MySQL workbench, aby sprawdzić typ danych (i maksymalną długość, jeśli istnieje) dowolnego pola wordpress zdefiniowanego w odpowiedniej tabeli / kolumnie wordpress
Jordi Cabot

Odpowiedzi:

11

Ze względu na strukturę tabeli wp_posts długość kolumny post_name (kolumna dla ślimaków) wynosi 200 znaków.

Eugene Manuilov
źródło
1
@TomAuger & Eugene - czy możesz potwierdzić problem, ponieważ Tom mówi, że ślimak miał 90 znaków. Wiem, że limit wynosi 200, ale to nie liczy domowego adresu URL, prawda?
brasofilo
@Eugene, dokładnie. 200 znaków. Mój ślimak miał dokładnie 90 znaków, więc nie osiągamy limitu DB.
Tom Auger
3

Wydaje mi się, że sam nie ma limitu, ale właściwość pola w bazie danych dla ślimaków może być ustawiona na maksymalną długość.

Więc sprawdź bazę danych!

Fredrik Weiland
źródło
@ Ten, który przegłosował: odpowiedź jest poprawna . Dlatego ponownie wziąłem udział w głosowaniu.
kaiser
0

Prawdopodobnie problem nie był w ogóle bezpośrednio związany z WordPress / bazą danych ...

Ale długość adresu URL przekroczyła 255 znaków (i nie wszystkie przeglądarki tak robią).

To, co się tutaj wydarzyło, mogło być adresem URL dłuższym niż 255 znaków, który został obcięty przez pasek adresu przeglądarki podczas otwierania go ... powodując pobranie złego permalink ... co spowodowało 4o4.

Tak więc możliwa do przyjęcia maksymalna długość ślimaka może wynosić:

255 - długość (Protokół + FQDN + struktura bezpośredniego łącza) ...

  • na podstawie twardego limitu przeglądarki.

Ale nie może być dłuższy niż 200 znaków ...

  • na podstawie wielkości pola post_name.

Nawet jeśli coś innego mogło spowodować 4o4 w tym konkretnym przypadku.

Mogła to być postać, która również nie została poprawnie zakodowana, przyczyny 4o4 są dość nieskończone ... kiedykolwiek uważany za zły klaster na HDD lub wadliwy moduł RAM? :)

Martin Zeitler
źródło
Identyfikator GUID nie jest adresem URL. Zdarza się, że wygląda jak jeden, ale nie jest używany do odczytu żądania. Jeśli przeniesiesz WordPress z jednej domeny do drugiej, GUID nie zostanie zmieniony. Zobacz core.trac.wordpress.org/ticket/6492 i core.trac.wordpress.org/ticket/10857 .
fuxia
W takim razie, do czego innego niż do identyfikacji należy użyć unikalnego identyfikatora? Mam na myśli, pytanie w zasadzie brzmi: z jakiego powodu w tym przypadku rzuca się 4o4?
Martin Zeitler
Myślę, że 404 i GUID nie są powiązane. WordPress po prostu nie używa GUID, gdy szuka posta pasującego do adresu URL.
fuxia
Myślę, że masz rację ... post_name i GUID można wykluczyć jako źródło problemu - pozostały bezpośrednie łącza i ponownie zapisuje. Bez logów Apache lub czegokolwiek, to tylko zgadywanie;)
Martin Zeitler
@syslogic Myślę, że przepisywanie jest prawdopodobnie przyczyną i wymaga dalszych badań. Adres URL, w tym część http: //, miał nadal mniej niż 128 znaków, więc nie sądzę, że osiąga sztywny limit długości przeglądarki.
Tom Auger