Kalle_B: Satz wird nicht geändert

Hallo,

möchte ein Kommentarfeld mit einem neuen Kommentar ergänzen, der vor den bisherigen Kommentaren stehen soll.

Das folgende Kommando ergibt affected_rows = 0, auch in phpMyAdmin. Warum?

UPDATE  termine  
SET     kommentar = CONCAT('[#00f][b]2010-01-17 11:55 [ ] Kalle:[/b][/#]  
  
TEST 17.01. 11:50 - regnerisch heute in Birkenau  
  
[hr]  
  
', kommentar)  
WHERE   id = '4348'

Gruß, Kalle

  1. Hi!

    Das folgende Kommando ergibt affected_rows = 0, auch in phpMyAdmin. Warum?

    Wir™ kennen deinen Datenbestand nicht. Wenn ein Statement keine Daten geändet hat, liefert Affected Rows die Anzahl 0. Gründe dafür sind: die alten Daten bestanden schon - was bei einem CONCAT() einer Spalte mit sich selbst eher nicht der Fall ist - oder die Bedingung traf nicht zu.

    Lo!

    1. Ho!

      mal eben mit dem Hund raus und Abstand gewonnen.

      Es war der erste Eintrag, Inhalt des Feldes kommentar war unbekannt, dann verweigert also CONCAT das Ergebnis.

      if(ISNULL(kommentar),' ',kommentar)

      ist die LÖsung. Danke für's Mitlesen.

      Kalle

      1. Hi!

        Es war der erste Eintrag, Inhalt des Feldes kommentar war unbekannt, dann verweigert also CONCAT das Ergebnis.

        CONCAT() verweigert nicht, aber bei sämtlichen Operationen mit NULL ist das Ergebnis NULL (mit Ausnahme der auf NULL spezialisierten Funktionen wie ISNULL(), COALESCE() und Operatoren wie IS NULL). CONCAT(irgendwas, NULL) ist also gleich NULL, also gabs da nichts zu ändern.

        if(ISNULL(kommentar),' ',kommentar)

        Warum nimmst du da jetzt ein Leerzeichen? Ein Leerstring täte es auch. Und COALESCE(kommentar, '') wäre eine kürzere Variante. Außerdem wäre die Frage, ob das NULL in dem Feld wirklich benötigt wird, oder ob ein Lerstring als Default-Wert nicht auch reicht und dann keine Extrabehandlung der NULL-Werte nötig macht.

        Lo!

        1. Hi!

          Außerdem wäre die Frage, ob das NULL in dem Feld wirklich benötigt wird, oder ob ein Lerstring als Default-Wert nicht auch reicht und dann keine Extrabehandlung der NULL-Werte nötig macht.

          War auch meine erste Idee, die DB zu ändern. Aber die Zulassung von NULL bedeutet doch so viel: "Inhalt nicht erforderlich".

          Und deshalb will ich Programmierprobleme nicht dadurch beheben, indem ich den Sinn von MySQL- Eigenschaften "anpasse".

          Kalle

          1. Moin!

            Außerdem wäre die Frage, ob das NULL in dem Feld wirklich benötigt wird, oder ob ein Lerstring als Default-Wert nicht auch reicht und dann keine Extrabehandlung der NULL-Werte nötig macht.

            War auch meine erste Idee, die DB zu ändern. Aber die Zulassung von NULL bedeutet doch so viel: "Inhalt nicht erforderlich".

            Das sehe ich nicht so.

            Wenn ein Feld NULL sein darf, dann bedeutet dass, dass man die Tatsache "Ich habe hier keinen Wert" speichern will.

            Sowas ist dann sinnvoll, wenn die Ermittlung des Wertes aufgrund externer Probleme oder Situationen fehlschlägt oder eben "weiß ich nicht" ergibt. Klassiker: Externes Thermometer - da könnte mal die Batterie leer sein, oder die Meßwertübertragung gestört. In so einem Fall wäre NULL anstelle einer Temperatur sinnvoll.

            Bei Kommentarfeldern hingegen ist NULL nicht sehr sinnvoll. Wenn man "keinen Kommentar" abgeben will, wird das Resultat ganz einfach ein Leerstring sein. Und der ist im Kontext auch immer sinnvoll behandelbar. Die Sonderbehandlung von NULL ist hierbei in der Regel nicht erforderlich.

            Die Tatsache "Inhalt nicht erforderlich" hingegen festzustellen und zu behandeln obliegt der Formularauswertung.

            Du kannst NULL im Sinne der Formularauswertung eigentlich nur dann sinnvoll speichern, wenn du zusätzlich zum Kommentarfeld noch eine Checkbox "will ich nicht ausfüllen" anbietest. Ansonsten kannst du ja nicht unterscheiden, ob der Leerstring nun "will nicht" bedeutet, oder "soll exakt 'ohne Worte' sein".

            Und deshalb will ich Programmierprobleme nicht dadurch beheben, indem ich den Sinn von MySQL- Eigenschaften "anpasse".

            MySQL-Eigenschaften haben keinen Sinn, den man berücksichtigen muss, sondern man nutzt sie, indem man ihren Sinn definiert.

            - Sven Rautenberg