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.