hawkmaster: Update per Batch, Problem mit Umlaute

Hallo zusammen,

ich habe eine Batchdatei gemacht die einen MySQL DB Update macht.
Das Problem ist. In der update.sql die aufgerufen wird, ist ein Wort "überprüfen" drin.
Beim ausführen der Batchdatei kommt auf einem Windows Server x64 die Fehlermeldung "Incorrect string value..." for colum.

Die DB selbst ist alles in UTF8

Vermutlich kodiert das CMD Batch Fenster die Umlaute anders?
Hat jemamnd eine Idee wie man das beheben kann?

vielen Dank und viele Grüße
hawk

  1. Tach!

    ich habe eine Batchdatei gemacht die einen MySQL DB Update macht.
    Das Problem ist. In der update.sql die aufgerufen wird, ist ein Wort "überprüfen" drin.
    Beim ausführen der Batchdatei kommt auf einem Windows Server x64 die Fehlermeldung "Incorrect string value..." for colum.

    Hast du dem Import-Programm mitgeteilt, in welcher Kodierung die zu importierenden Daten vorliegen? Da gibt es garantiert einen Kommandozeilenschalter (wenn es eins der CLI-Tools von MySQL ist).

    Die DB selbst ist alles in UTF8

    Datenbank und Tabellen sind nebensächlich. Wichtig ist die Kodierung der einzelnen Stringfelder, damit MySQL weiß, wie es die Daten ablegen soll. Aus diesen Einstellungen kann es allerdings nicht entnehmen, in welcher Kodierung irgendwelche Daten sind, die von außen kommen (oder auch nach außen gehen sollen).

    Vermutlich kodiert das CMD Batch Fenster die Umlaute anders?

    Das spielt nur dann eine Rolle, wenn du die Daten zu Fuß eingibst. Wenn sie in einer Datei vorliegen, bist du verantwortlich, in welcher Kodierung du die Datei gespeichert hast.

    dedlfix.

    1. Hallo dedlfix,

      danke für deine Hilfe.
      Leider klappt es immer noch nicht unter Server 2008 R2 (english)

      Hast du dem Import-Programm mitgeteilt, in welcher Kodierung die zu importierenden Daten vorliegen? Da gibt es garantiert einen Kommandozeilenschalter (wenn es eins der CLI-Tools von MySQL ist).

      Ja, das steht in der Batch so drin:
      --default_character_set utf8

      Beide Dateien, die Batchdatei und die SQL Datei sind auf dem Server als ANSI gespeichert.
      Hier ein Auszug so wie ich es versuche:
      ---------------------------------------------------------------------
      setlocal enableextensions enabledelayedexpansion
      chcp 1252
      echo Please specify the MySQL program direcotry
      set /p MySQLBinDir=
      set MySQLBinDir=!MySQLBinDir!
      echo das bin dir ist !MySQLBinDir!
      "!MySQLBinDir!\mysql.exe" -uroot -p%MySQLRootPW% --default_character_set utf8 -Dtestdb < TestdbUpdate.sql
      ----------------------------------------------------------------------

      Der Pfad zum Bin dir wird korrekt ausgegeben. Der Update bzw. die Befehle in der TestdbUpdate.sql werden auch ausgeführt bis es halt zu dem INSERT kommt wo ein ü oder ein ö im Wort vorkommt.
      Die Fehlermeldung in der Batchdatei heisst dann:
      ERROR 1366 (HY000 at line 7: Incorrect string value: '\xFCberpr...' for column 'german' at row 1.

      Damit ist dann das Wort "überprüfen" gemeint.

      Wie gesagt. Das gleiche Script auf einem anderen PC mit Win 7 32 bit deutsch, läuft einwandfrei. Auch wenn ich auf dem Sevr 2008 R2 mittels phpmyadmin das TestdbUpdate.sql ausführe klappt es.

      Irgendwie wandelt die Batch die Kodierung um??

      vielen Dank und viele Grüße
      hawk

      1. Tach!

        Hast du dem Import-Programm mitgeteilt, in welcher Kodierung die zu importierenden Daten vorliegen?
        Ja, das steht in der Batch so drin: --default_character_set utf8
        Beide Dateien, die Batchdatei und die SQL Datei sind auf dem Server als ANSI gespeichert.

        Du sagst der mysql.exe also, sie bekäme UTF-8-kodierte Daten, übergibst dann aber eine als ANSI (also Windows-1252) gespeicherte SQL-Datei?

        Der Pfad zum Bin dir wird korrekt ausgegeben. Der Update bzw. die Befehle in der TestdbUpdate.sql werden auch ausgeführt bis es halt zu dem INSERT kommt wo ein ü oder ein ö im Wort vorkommt.
        Die Fehlermeldung in der Batchdatei heisst dann:
        ERROR 1366 (HY000 at line 7: Incorrect string value: '\xFCberpr...' for column 'german' at row 1.

        \xFC ist ja auch keine UTF-8-Sequenz für ein ü.

        Das gleiche Script auf einem anderen PC mit Win 7 32 bit deutsch, läuft einwandfrei.

        Dann wird wohl das --default_character_set utf8 ignoriert oder steht auf latin1. (Eigentlich fehlt da noch ein = dazwischen.)

        Auch wenn ich auf dem Sevr 2008 R2 mittels phpmyadmin das TestdbUpdate.sql ausführe klappt es.

        Dem PMA muss man beim Import extra angeben, in was für einer Kodierung die Datei vorliegt.

        Irgendwie wandelt die Batch die Kodierung um??

        Nein.

        dedlfix.