flizzer: Verbotene Zeichen bei mySQL ?

Hallo!

Gibts bei mySQL irgendwelche Zeichen, die man nicht in ein Tabellenfeld eintragen darf ? Falls nicht welchen Typ weist man dem Feld am besten zu damit alle Zeichen erlaubt sind.

Ich Frage deshalb, weil ich nämlich Text aus einer Textdatei einlesen wollte der auch einfache Hochkomma enthielt. Da ich den Wert aber auch unter Hochkomma setzen muss hat das nicht geklappt.

Sind einfache Hochkomma in Tabellen trotzdem erlaubt ?

  1. Mosche

    Ich Frage deshalb, weil ich nämlich Text aus einer Textdatei einlesen wollte der auch einfache Hochkomma enthielt. Da ich den Wert aber auch unter Hochkomma setzen muss hat das nicht geklappt.

    Sind einfache Hochkomma in Tabellen trotzdem erlaubt ?

    Ich kenne mich jetzt nicht mit mySQL aus, eher mit PostgreSQL.

    Du sagst auch leider nichts darüber, wie du auf die DB zugreifst.

    Wenn du  es mit Perl/DBI machen solltest, gibt es folgende Vorgehensweise:
    DBI (bzw. DBD::*) stellt mit der Funktion quote eine Datenbankspezifische Methode zur Verfügung, mit der du die Sonderzeichen in deinem Text escapen kannst. Das heisst für dich:

    $text = $dbh->quote($text);

    Deine Sonderzeichen sollten dann entspechend gekennzeichnet sein.

    Tschö Matti

  2. Hallo!

    Gibts bei mySQL irgendwelche Zeichen, die man nicht in ein Tabellenfeld eintragen darf ? Falls nicht welchen Typ weist man dem Feld am besten zu damit alle Zeichen erlaubt sind.

    Die Tabellentypen CHAR, VARCHAR, TEXT, BLOB können alle Zeichen aufnehmen.

    Ich Frage deshalb, weil ich nämlich Text aus einer Textdatei einlesen wollte der auch einfache Hochkomma enthielt. Da ich den Wert aber auch unter Hochkomma setzen muss hat das nicht geklappt.
    Sind einfache Hochkomma in Tabellen trotzdem erlaubt ?

    Du mußt Anführungszeichen maskieren, einfache nicht. Jede Script- und Programmiersprache hat dafür Funktionen, PHP zum Beispiel addslashes().

    $text1 = addslashes($text1);
    $text2 = addslashes($text2);
    INSERT INTO tabelle (spalte1, spalte1) VALUES ("$text1","$text2");

    Beispiele:

    Falsch: 'Da kommt ein 'Auto' von hinten';
    Richtig: 'Da kommt ein "Auto" von hinten';
    Richtig: "Da kommt ein 'Auto' von hinten";
    Richtig: "Da kommt ein 'Auto' und "Hund" von hinten"; // "Hund" durch addslashes() maskiert

    MfG, André Laugks

  3. Hallo,

    lt. SQL-Standard werden Zeichketten in SQL grundsaetzlich in einfache Hochkommata eingeschlossen. Das einfache Hochkomma selber wiederum wird durch ein weiteres einfaches Hochkomma maskiert.
    Bsp: 'So geht''s'

    Weitere Maskierungen in SQL
    New Line  --> \n
    Backslash --> \

    Ansonsten steht noch die Moeglichkeit beliebiger Zeichen im Hex zur Verfuegung:
    \x6d ist zB ein 'm'

    MfG Ralph