Ankündigung

Einklappen
Keine Ankündigung bisher.

Illegal mix ...

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Illegal mix ...

    Hallo Leute,

    ich habe folgende function in MySQL 5.0.20 erstellt:

    DELIMITER $$
    DROP FUNCTION IF EXISTS `db`.`fnGetEinkauf` $$
    CREATE FUNCTION `db`.`fnGetVerkauf` (param_nr varchar(50)) RETURNS INT
    BEGIN
    DECLARE bestand INT;
    SELECT sum(anzahl) into bestand
    FROM stock
    WHERE stock.nr = param_nr;
    return bestand;
    END $$
    DELIMITER ;

    Die Funktion soll anhand einer alphanumerischen Artikelnummer einen Bestand zurückgeben. Rufe ich die Funktion mittels:

    SELECT fnGetEinkauf("A01")

    auf, erhalte ich diese Fehlermeldung hier:

    Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_general_ci,IMPLICIT) for operation '='

    Was muss ich ändern?

  • #2
    Was glaubst du könnte die Fehlermeldung
    Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_general_ci,IMPLICIT) for operation '='
    denn übersetzt heißen und welche zwei genannten "Collations" könnten denn in der
    operation '='
    gemeint sein?

    Kommentar


    • #3
      nunja, sicher ist "stock.nr = param_nr; " gemeint. die Tabelle "stock" ist mit 'latin1_german1_ci' hinterlegt.

      Wie kann ich jedoch Einfluss auf den Parameter "param_nr" nehmen?

      Vielen Dank

      Kommentar


      • #4
        Welche Zeichensätze sind denn für die Spalten `nr` und `param_nr` hinterlegt? Die können ja durchaus auch andere sein, als die der Tabelle.

        Kommentar


        • #5
          Hallo inu,

          die Meldung sagt doch bereits, dass die beiden Spalten/Tabellen unterschiedliche Zeichensätze verwenden. Behebst du das, wird das funktionieren.

          Kommentar


          • #6
            Welche beiden Spalten bzw. Tabellen meinst Du? Ich habe doch nur die Tabelle "stock". Und hier ist sowohl die Tabelle selbst als auch die Spalte mit "latin1_german1_ci" definiert.

            Der Vergleichswert ist doch aber ein Übergabeparameter an die Funktion!

            Kommentar


            • #7
              Dann ist wohl die Kollation deiner Verbindung latin1_general_ci.

              Kommentar


              • #8
                und wie kann ich die Kollation der Verbindung ändern? Ich nutze den MySQL Query-Browser

                Vielen Dank

                Kommentar


                • #9
                  Bevor du die Verbindungs-Kollation jedes mal änderst (wenn es denn überhaupt daran liegt), würde ich lieber die Kollation der Tabelle anpassen. Oder gibt es einen bestimmten Grund, warum du latin1_german1_ci verwendest?

                  Kommentar


                  • #10
                    Nun, alle meine Tabellen (knapp 100 Stück) in der Datenbank sind auf " latin1_german1_ci" eingestellt

                    Kommentar


                    • #11
                      Hallo inu,

                      sind auch alle Spalten dieser Tabellen gleich eingestellt? Obige Fehlermeldung beschreibt eigentlich das Gegenteil...

                      Kommentar


                      • #12
                        Diese Tabelle hat nur eine Spalte, wo ein Stringwert hinterlegt wird. Alle anderen Spalten sind INT-Spalten.

                        Kommentar


                        • #13
                          Hallo inu,

                          dann versuch mal das Statement per PHP anzusetzen. Evlt. mischt hier die Statndard Collation deines Query-Tools mit...

                          Kommentar

                          Lädt...
                          X