Ein minimales Server-Image bringt oft nur das C-Locale mit und sonst nichts. Alles funktioniert, bis der Text nicht mehr schlichtes Englisch ist: Arabisch wird im Protokoll zu Fragezeichen, ein Dateiname mit Akzent lässt sich nicht anlegen, und die Sortierung reiht Namen in einer Ordnung, die kein Leser wiedererkennt.

Sehen, was gesetzt ist

locale
locale -a | head

Steht in der Liste nur C und POSIX, ist auf der Maschine kein UTF-8-Locale erzeugt.

Eines erzeugen und setzen

sudo apt-get install -y locales
sudo locale-gen en_US.UTF-8 ar_EG.UTF-8
sudo update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8

Melden Sie sich ab und wieder an. Die Variablen werden beim Anmelden gelesen, die Shell, aus der Sie sie gesetzt haben, zeigt sie also nicht.

Die Warnungen, die von SSH kommen

Meldungen über ein Locale, das sich nicht setzen lässt, heißen meist: Ihr Laptop schickt sein eigenes Locale an einen Server, der es nicht hat. Erzeugen Sie das Locale auf dem Server, oder bringen Sie den Client dazu, es nicht mehr zu senden.

# on your machine, ~/.ssh/config
Host *
    SendEnv -LANG -LC_*

Die Datenbank ist eine eigene Frage

Ein Server-Locale ändert nichts daran, was MySQL speichert. Eine als latin1 deklarierte Spalte verstümmelt Arabisch und Emoji, ganz gleich wie das Betriebssystem eingestellt ist — das steht in Zeichensatz, Sortierung und die Emoji-Falle.

Das Locale zu ändern ändert, wie manche Programme sortieren. Hängt ein Skript von der Sortierreihenfolge ab — eine Sicherungsrotation, ein Bericht —, prüfen Sie es nach der Änderung einmal, statt es anzunehmen.