Fehler bei Beitrags- Zeichenbegrenzung

Started by jezinho, May 09, 2013, 04:38:56 AM

Previous topic - Next topic

jezinho

Hallo,

bei mir im Forum (ich habe noch nicht auf SMF 2.0.4 upgedatet, bisher hat die Zeit gefehlt) ist ein Limit für die Beitragslänge von 50.000 Zeichen festgesetzt. Zwei Mitgliedern sind jetzt Fehler/Probleme bei dieser Zeichenbegrenzung für Beiträge aufgefallen:

1. Man kann sich im Vorschaufenster genau an diese Grenze herantasten, so dass man gerade die erlaubte Anzahl an Zeichen hat und die Vorschau nicht mehr meldet "Beitrag hat die max. Länge erreicht". Wenn man nun den Beitrag absenden möchte, erscheint diese Meldung wieder. In den beiden Fällen "Vorschau" und "Schreiben" scheint also auf unterschiedliche Art und Weise gerechnet zu werden (evtl. kommt das durch Zeichenkonvertierungen zustande?)

2. Ein anderer User hatte folgendes Problem: Er hat einen Text mit 50.000 Bytes erstellt (der auch viele Absätze und Leerzeichen enthält), den er ohne besagte Fehlermeldung "Beitrag hat die max. Länge erreicht" abschicken konnte. Im Forum wird der Beitrag aber anschließend abgeschnitten, so dass fast das letzte Viertel fehlt. Es sieht ziemlich danach aus, dass neben der eingestellten Begrenzung von 50.000 Zeichen anschließend noch der fertige HTML-Code für jeden Beitrag längenbegrenzt ist.

Ist zu den beiden Problemen etwas bekannt?


Edit: Der Grund für Problem 2 ist gefunden: Das mysql-Feld in der Datenbank (Typ TEXT) nimmt nur 65536 Bytes auf, alles weitere verfällt dann natürlich ohne Vorwarnung - das ist blöd :/
Theoretisch könnte man den Typ ändern auf MEDIUMTEXT, so dass es mehr Zeichen aufnehmen kann. Hat das schonmal jemand von euch gemacht?

ThorstenE

1) ist vermutlich ein Bug
2) MEDIUMTEXT ist problemlos machbar, macht das Forum aber etwas langsamer (größere Felder -> mehr Daten -> langsamere Suche)

SMF 2.1 (ist noch Alpha Status) hat im Admin-Interface eine Möglichkeit von TEXT auf MEDIUMTEXT zu konvertieren.

jezinho

Danke für die Antwort :)

Wenn ich jetzt auf MEDIUMTEXT umstelle und anschließend die Forensoftware update, wird das Feld dann dadurch wieder auf TEXT zurückgesetzt? Das würde dann ja alle längeren Beiträge kappen. Um auf Nummer sicher zu gehen wäre es da im Falle des Falles dann wohl doch klüger, auf SMF 2.1 zu warten. Wenn da MEDIUMTEXT offiziell unterstützt wird, wird an den Fall vermutlich gedacht werden.

Allerdings ist die Geschwindigkeit auch ein gutes Argument. Das wäre es wohl nicht wert, wenn weniger als 1% der Beiträge das überhaupt ausnutzen würden.
Belegt ein solches TEXT-Feld denn immer die kompletten 65536 Bytes (egal, ob vielleicht nur ein Wort im Beitrag geschrieben wurde), oder doch nur entsprechend des effektiven Inhalts des Feldes?

ThorstenE

die kleinen Update-Pakete ändern extrem selten etwas an der Bank.. Das letzte, an das ich mich erinnern kann, war der Srpung vom SMF 1.1 RC3 auf SMF 1.1 (das ist Ewigkeiten her)..

Zum Thema Speicherplatzverbrauch: es werden nicht die kompletten Bytes beschrieben, aber es werden mehr Bytes belegt:
http://dev.mysql.com/doc/refman/5.1/de/storage-requirements.html

Grundsätzlich ist es immer ratsam, nur die Feldgröße zu nutzen, mit der man in der Regel auskommt. Je kleiner die Feldtypen desto schneller wird's.. Geschwindigkeit spielt aber erst ab etwa 50.000 Beiträgen eine gewisse Rolle. Wenn du beispielsweise das WarriorCatsRPG Forum nimmst (hat aktuell ca. 42 Mio Beiträge >> http://warriorcatsrpg.com/ ) sind einige Felder gezwungenermaßen größer als z.B. TINYTEXT, aber beim Nachrichtentext sollte man sich ernsthaft überlegen, ob man den Sprung von TEXT auf MEDIUMTEXT machen will, weil der Byte-Mehrverbrauch und die Performance darunter mit ziemlicher Sicherheit leiden werden.

jezinho

Besten Dank nochmal für die Antwort!
Es wird jetzt wohl darauf hinauslaufen, dass ich die Beitragslänge von 50.000 Zeichen wieder etwas zurückschrauben werde. 40.000 Zeichen oder etwas in der Art sollte die Wahrscheinlichkeit verringern, dass das Datenbankfeld überläuft. Lieber eine Warnung, dass der Beitrag nicht passt, als das kommentarlos das Ende abgeschnitten wird.

Advertisement: