Seite 1 von 2

[3.3] SQL-Fehler (out of range)

Verfasst: 01.04.2025 16:59
von Jay2k1
Moin,

ich hab heute einen lustigen Fehler reinbekommen. Ein User wollte einen Thread öffnen, dabei bekam er einen "General Error":
Out of range value for column 'topic_views' at row 1
Wie sich herausstellt, hat topic_views den Datentyp MEDIUMINT, und der geht halt nur bis 16.777.215... und tatsächlich:

[ externes Bild ]

DB-Designer: "Wie viele views kann ein thread schon kriegen..."
Unsere Foristen: "Hold my beer" :D

Das Forum ist auch schon 23 Jahre alt, da kann das wohl mal passieren :D

Die Lösung war natürlich, den Datentyp auf INT umzustellen. Nun können noch 255 mal so viele Views dazukommen, bis es wieder kracht.

Re: [3.3] SQL-Fehler (out of range)

Verfasst: 01.04.2025 17:00
von Crizzo
Hi,

Welche phpBB Version habt ihr denn?

Re: [3.3] SQL-Fehler (out of range)

Verfasst: 01.04.2025 17:01
von Jay2k1
3.3.13 ist das.

Re: [3.3] SQL-Fehler (out of range)

Verfasst: 01.04.2025 17:26
von Dr.Death
Datenbank Backup erstellen und anschliessend das mal testen:

Vorausgesetzt, dein Tabellen Präfix lautet phpbb_

Code: Alles auswählen

ALTER TABLE `phpbb_topics` CHANGE `topic_views` `topic_views` INT(8) UNSIGNED NOT NULL DEFAULT '0';

Edit: bin zu langsam, hatte nicht gesehen, dass Du das bereits umgestellt hast...... ( /me muss seine Brille putzen und die Sense schärfen.... )

Re: [3.3] SQL-Fehler (out of range)

Verfasst: 01.04.2025 17:39
von Jay2k1
Moin, danke, das hab ich schon längst. Ich fand das nur amüsant und wollte andere daran teilhaben lassen :)

Im schema.json steht auch UINT drin, und eine Migration hab ich auch gefunden:

Code: Alles auswählen

phpbb/db/migration/data/v30x/release_3_0_0.php:						'topic_views'	=> array('UINT', 0),
Warum das bei dem Forum noch auf MEDIUMINT stand, weiß ich auch nicht... Das Forum muss ursprünglich mal ein 2.x gewesen sein, da es im April 2002 gestartet wurde. Irgendwo auf dem Weg hat dann wohl eine Migration nicht gegriffen...

Re: [3.3] SQL-Fehler (out of range)

Verfasst: 01.04.2025 18:45
von LukeWCS
Hallo

Interessantes Problem. Als du das hier gepostet hattest, hab ich mir ebenfalls zumindest stichprobenweise die Migration von 3.3 bis zurück zu 3.0 angeschaut und wie du festgestellt, dass die Spalte den Typ UNSIGNED-MEDIUMINT hat, aber eigentlich UNSIGNED-INT sein sollte.

Daraufhin habe ich meine 4 lokalen TBs in der DB angeschaut. Ich habe ein 3.1, 3.2 und 3.3 TB. Das 3.1 ist die Basis, also keine Vorgeschichte. 3.2 ist ein Klon von 3.1 mit Upgrade auf 3.2. Gleiches Spiel beim 3.3 TB, das ist ein Klon von 3.2 mit Upgrade auf 3.3. Daneben habe ich noch ein weiteres 3.3 ohne Vorgeschichte, also effektiv als 3.3 installiert. Aber auch da ist, wie in den anderen 3, der Typ UNSIGNED-MEDIUMINT, obwohl die Migration ganz klar etwas anderes "sagt". Des Weiteren ist das bei einem 3.0 definitiv noch als UNSIGNED-MEDIUMINT definiert gewesen, aber schon seit 3.1 ist das als UNSIGNED-INT definiert.

Das heisst der Fehler muss weit zurückliegen und "irgendwo" in der Migration 3.0->3.1 seine Ursache haben.

Re: [3.3] SQL-Fehler (out of range)

Verfasst: 01.04.2025 19:04
von Mike-on-Tour
Jetzt habt ihr mich neugierig gemacht und ich habe mal stichprobenartig einige meiner TBs gecheckt, Ergebnis:
In allen ist es ein mediumint(8), außer in dem ganz neu angelegten mit phpBB 3.3.15 RC1, da ist es int(10). Also auch bei den TBs, die mal als 3.3.x angelegt wurden, ist die Migration offensichtlich nicht so gelaufen wie geplant. Wo aber jetzt der Grund dafür liegt... :-?

Re: [3.3] SQL-Fehler (out of range)

Verfasst: 01.04.2025 19:33
von LukeWCS
Mike-on-Tour hat geschrieben: 01.04.2025 19:04 außer in dem ganz neu angelegten mit phpBB 3.3.15 RC1, da ist es int(10).
Ahja! Da ich das eine 3.3 TB frisch installiert hatte (ohne Vorgeschichte ) und vermutlich damals dazu ein 3.3.0 benutzt habe und bei deinem 3.3.15-rc1 TB der Fehler behoben ist, hiesse dass 2 Dinge:

1. Der Migrationsfehler muss "irgendwo" ab 3.3.1+ behoben worden sein.
2. Bei phpBB's die vor Version 3.3.{unbekannt} installiert wurden, bleibt der Fehler bestehen.

Re: [3.3] SQL-Fehler (out of range)

Verfasst: 01.04.2025 21:10
von LukeWCS
Update und Korrektur

@Jay2k1

1. Die Annahme das UINT für UNSIGNED INTEGER steht ist zwar naheliegend, aber falsch. Da haben wir uns beide irritieren lassen. :wink: Im phpBB Core fand ich ein assoziatives Array mit dem die Kürzel der Migrationsdateien in ihre tatsächlichen Strings konvertiert werden. Daraus der relevante Ausschnitt:

Code: Alles auswählen

				'ULINT'		=> 'INT(10) UNSIGNED',
				'UINT'		=> 'mediumint(8) UNSIGNED',
2. Daraus folgt; die Annahme es handle sich um einen Migrationsfehler ist ebenfalls falsch. Also habe ich mir gezielt die Migration von 3.3.15-rc1 angeschaut, denn bei 3.3.14 ist es definitiv noch UNSIGNED-MEDIUMINT. Ich wurde auch schnell fündig bei

phpBB3\phpbb\db\migration\data\v33x\topic_views_update.php

Code: Alles auswählen

	public function update_schema(): array
	{
		// This extends the topic view count field so we can support much larger values.
		return [
			'change_columns' => [
				$this->table_prefix . 'topics' => [
					'topic_views'  => ['ULINT', 0],
				],
			]
		];
	}

	public function revert_schema(): array
	{
		return [
			'change_columns' => [
				$this->table_prefix . 'topics' => [
					'topic_views'  => ['UINT', 0],
				],
			]
		];
	}
Das heisst unterm Strich: erst bei 3.3.15 wird der Zahlentyp von topic_views auf UNSIGNED INTEGER geändert und hat dann den Maximalwert 4294967295.

Re: [3.3] SQL-Fehler (out of range)

Verfasst: 01.04.2025 21:42
von Jay2k1
Sauber recherchiert!

Die Nomenklatur ist also etwas irreführend. Und das eigentliche Problem ist gelöst, aber die Lösung noch nicht released. Was für ein Timing. :D