[Postfixbuch-users] DB-Queries

Stefan G. Weichinger lists at xunil.at
Fr Mär 16 14:58:22 CET 2012


Am 16.03.2012 14:44, schrieb Igor Sverkos:
> Hallo,
> 
> Stefan G. Weichinger schrieb:
>>> Verstanden?
>>
>> Ich denke, ja.
> 
> Ich denke nicht :)

Ich auch nicht mehr ;)

> 1) Stehen in dem Dump CHARSET-Anweisungen? Ein guter Dump enthält bspw.
> zu Beginn etwas wie
> 
>   /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
>   /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
>   /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
>   /*!40101 SET NAMES latin1 */;
>   [...]
> 
> damit beim Import nichts kaputt geht (gut, bei Ausgangsdaten latin1 und
> Import als UTF-8 kann nichts passieren, da latin1 wie gesagt eine
> Untermenge von UTF-8 ist... aber umgekehrt wäre das bspw. fatal).

head des Dumps:


-- MySQL dump 10.9
--
-- Host: localhost    Database: mail
-- ------------------------------------------------------
-- Server version       4.1.13

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,
FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `mail`
--


usw


> 
> 2) Hast du auch die my.cnf (also Konfigurationsdatei) des Servers
> übernommen?
> 
> 
> Oder anders gefragt:
> Welchen Standard-Zeichensatz verwendet dein Server?
> 
> Zeige uns am besten mal ein
> 
>   mysql> show variables like 'char%';
> 

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

> Das ist der Teil weswegen ich glaube, du hast es leider noch nicht
> verstanden:
> 
> Das CREATE-Statement betrifft nur die Daten, die der mysqld persistieren
> soll. D.h. solltest UTF-8 Daten in der Tabelle speichern wollen, wäre
> das (nicht) möglich. Sprich wenn du jetzt einen UTF-8 String dem mysqld
> übergibst, würde er diesen beim Speichern in latin1 wandeln - dabei
> gingen also Daten verloren. Keine tolle Idee.
> 
> Wenn du nichts mit UTF-8 Zeichen am Hut hast, ist latin1 völlig in
> Ordnung (sogar besser als einfach alles UTF-8 zu machen, Stichwort
> Speicher).
> 
> Einzig entscheidend ist, dass wenn du dich mit dem mysqld verbindest,
> ihm mitteilst in welchem Charset du ihm jetzt Daten übergeben wirst.
> Wenn der Server wie gesagt mit dem Standardwert latin1 läuft, wird er
> von dir erwarten, auch latin1-kodierte Daten zu erhalten. Übergibst du
> ihm aber UTF-8-kodierte Daten, musst du das dem Server eben sagen.
> Entweder indem du den Standardwert änderst oder explizit für dieses
> Session den "SET CHARACTER"-Befehl absetzt.

Ergo muß ich jetzt checken, was der superduper web-cyradm da macht, wenn
er schreibt ....

und policyd und postfix usw.

Jaaa, das macht wirklich Laune.

> Mit "_latin1" castest du. Das Problem dabei ist: Die Übergabe der Daten
> erfolgt vorher... dabei würden die Daten verloren gehen.
> In deinem Falle wirst du dadurch lediglich "Illegal mix of
> collations"-Meldung los, weil du eine Konvertierung erzwingst... aber
> siehe oben - wenn wirklich UTf-8 Daten dabei sind, wird das böse Folgen
> haben :)

Also bin ich jetzt auf dem nächsten Level meiner Paranoia:
Ich fürchte mich, weil *keine* Fehlermeldung mehr sichtbar ist ...

=8-]

Oh Mann, ist das alles mühsam ... man verzeihe den Seufzer ...

> Löse also das Ausgangsproblem gleich und kaschiere nichts.

Das würde ich ja sehr gerne.

Aber mir raucht schon die Birne von alldem. Wie man merkt.

Danke für die Fürsorge, Stefan



Mehr Informationen über die Mailingliste Postfixbuch-users