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.
