Wenn MariaDB als Datenbankserver für Paperless-ngx bei der Installation ausgewählt wurde, gibt es eine Einschränkung: Die Standard-Formatierung der Datenbank bietet keine Möglichkeit, dass die Groß- und Kleinschreibung beachtet wird. Dies hat zur Folge, dass z.B. das Erstellen eines Tags mit dem Namen "Tag" und eines weiteren Tags mit dem Namen "TAG" nicht funktioniert. Sie werden gleichwertig angesehen. Um das zu beheben, muss der Datensatz der entsprechende Tabelle konvertiert werden. Meine Anleitung zeigt die notwendigen Schritte unter Linux per Konsole.

Vorbereitung

Da Paperless-ngx unter einem Docker-Container läuft, musst du dich in die Konsole dieses Containers schalten. Dazu begibst du dich zunächst in das Verzeichnis, in welchem die docker-compose.yml von Paperless-ngx liegt, und lässt dir die aktuellen Container ausgeben. Paperless-ngx muss dazu derzeit laufen:

docker ps

Die Ausgabe sieht in etwa so aus:

paperless@vps:/home/paperless$ docker ps
CONTAINER ID   IMAGE                                        COMMAND                  CREATED       STATUS                 PORTS                                       NAMES
7f9bbc33921a   ghcr.io/paperless-ngx/paperless-ngx:latest   "/sbin/docker-entryp…"   2 hours ago   Up 2 hours (healthy)   0.0.0.0:8000->8000/tcp, :::8000->8000/tcp   paperless-webserver-1
6a0afee91803   redis:7                                      "docker-entrypoint.s…"   2 hours ago   Up 2 hours             6379/tcp                                    paperless-broker-1
ac651518023f   mariadb:10                                   "docker-entrypoint.s…"   2 hours ago   Up 2 hours             3306/tcp                                    paperless-db-1

Wichtig ist die rot markierte ID vom MariaDB-Container. Dies ist die eindeutige ID des Containers, welche bei jedem Start des Containers neu generiert wird. Kopiere sie, sie wird später benötigt.

Mit folgendem Script werden alle Tabellen in der Datenbank paperless entsprechend konvertiert. Erstelle beispielsweise mit nano eine neue .sh-Datei mit diesem Inhalt und passe das Passwort entsprechend an.

#!/bin/bash

# MySQL Zugangsdaten
MYSQL_USER="paperless"
MYSQL_PASSWORD="PAPERLESS_DATENBANK_PASSWORT"
MYSQL_DATABASE="paperless"

SQL_COMMAND="ALTER TABLE"

TABLES=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW TABLES" $MYSQL_DATABASE --skip-column-names)

for TABLE in $TABLES
do
	echo "Führe Befehl für Tabelle $TABLE aus..."
	mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "$SQL_COMMAND $TABLE CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;" $MYSQL_DATABASE
done

Mache die Datei ausführbar:

chmod +x Script.sh

Kopiere das nun in den Container der Datenbank, um es dort später auszuführen:

docker cp Script.sh ID_HIER:/

Per Konsole in den Docker-Container einsteigen

Verwende jetzt diesen Befehl, um in den Container einzusteigen. Verwende dazu die ID des Containers des Datenbank-Servers:

docker exec -it ID_HIER /bin/bash

Datenbank konvertieren

In der Container-Sitzung startest du jetzt die MySQL-Konsole, um die Datenbank generell erst einmal zu konvertieren. Diese Änderung ist dann nur für zukünftige neue Tabellen aktiv. Später werden noch alle bereits vorhandenen Tabellen konvertiert.
Melde dich mit dem Root-Benutzer des Datenbank-Servers an:

mysql -u root -p

Das Passwort findest du in deiner docker-compose.yml-Datei. Standardmäßig lautet es paperless.
Setze dann folgenden Befehl ab, um die Zeichenkodierung zu utf8mb4_bin zu ändern:

ALTER DATABASE paperless CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

Verlasse die Konsole jetzt mit:

EXIT;

Alle Tabellen konvertieren

Zum Schluss werden noch alle bereits vorhanden Tabellen mit dem Script konvertiert, welches vorhin angelegt wurde. Führe das Script dazu einfach aus:

./Script.sh

Die Shell des Containers kannst du jetzt wieder verlassen:

exit

Die Datenbank ist nun fertig konvertiert und es lassen sich nun unter anderem Tags mit dem selben Namen, aber unterschiedlicher Groß- und Kleinschreibung anlegen. Die Änderung ist sofort aktiv.

Bei Fragen oder Anregungen freue ich mich natürlich über eure Kommentare.

Über mich

Ich bin Janis (aka. EurenikZ), 25 Jahre alt und komme aus der Nähe von Frankfurt am Main. Ich habe eine abgeschlossene IHK-Ausbildung zum Fachinformatiker für Systemintegration und arbeite als Junior IT-Administrator in einem IT-Systemhaus. Neben meinem IT-Blog beschäftige ich mich viel mit diversen IT-Themen und meinen Webseiten sowie Telegram Bots und biete IT-Dienstleistungen an.

271 Aufrufe

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten.

Durchschnittliche Bewertung 5 / 5. Anzahl Bewertungen: 1

Bisher keine Bewertungen. Sei der Erste, der diesen Beitrag bewertet!

Es tut mir Leid, dass der Beitrag für dich nicht hilfreich war!

Wie kann ich diesen Beitrag verbessern?

Hinterlasse einen Kommentar