Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL Tabellenkollation

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL Tabellenkollation

    Heyho,

    ich habe vor ein paar Wochen angefangen mich mit PHP und MySQL zu versuchen und daran recht viel Freude gefunden. Soweit löse ich alle Probleme selbst doch komme mit folgendem einfach nicht weiter:

    Ich habe eine Datenbank und eine Homepage mit einem Login etc. und entsprechenden funktionen für registrierte Benutzer.

    Bisher habe ich alle Datensätze mit dem Datenbankstandardzeichensatz also UTF-8 abgespeichert.
    Nun registrieren sich einige Benutzer (aus welchen Gründen auch immer) mit allen möglichen Sonderzeichen im Namen, was von der Datenbank bei SELECT-Abfragen nicht beachtet wird (zB. zeigt eine suche nach einem Begriff mit ß auch Datensätze mit s an, oder Å = a usw.). Also habe ich lange rumprobiert und nun als "einfachste" bzw. schnellste Lösung (nachdem ich alle möglichen anderen Zeichensätze durchprobiert habe) auf binäre Kollation umgestellt. Damit funktionieren natürlich wiederum andere Dinge nicht (Abfragen mit LIKE) o.ä.

    Kann mir da eventuell jemand einen Denkanstoß geben wie ich es realisieren kann, dass sowohl Benutzer (oder andere von Benutzern eingegebenen Daten) was Sonderzeichen angeht eindeutig sind, als auch case insensitive bzw so gespeichert werden, dass "ungenauere" Suchanfragen akzeptiert werden? Ist das alleine mit der Datenbank zu realisieren, oder gibt es da eventuell einen workaround mittels PHP?

    Ich hoffe ich habe mich halbwegs verständlich ausgedrückt und bedanke mich schon Mal für jegliche Hilfe.

    Liebe Grüße.

  • #2
    Ich habe das zwar noch nie bis ins letzte verifiziert, aber UTF-8 sollte eigentlich alle erwartbaren Sonderzeichen abdecken. Oder haben die sogar Emojis in den Usernamen?!
    Eigentlich wird, eben wegen der Emojis etc. inzwischen utf8mb4 als Kollation empfohlen.

    Jetzt aber mal für die Zwecke eines Logins.Da kommt es mir schon komisch vor, dass Du das mit LIKE abfragen willst.

    Für meine Begriffe müssen Logins mit = abgefragt werden. Und wenn Du unbedingt case insensitive arbeiten willst - hoffentlich nur beim Usernamen - dann nimm eine *_ci Kollation.

    Passwörter solltest Du gehasht abspeichern. Siehe hier: https://www.php.net/manual/de/functi...sword-hash.php
    [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

    Kommentar


    • #3
      Zitat von johnnybgoode Beitrag anzeigen
      Bisher habe ich alle Datensätze mit dem Datenbankstandardzeichensatz also UTF-8 abgespeichert.
      Nun registrieren sich einige Benutzer (aus welchen Gründen auch immer) mit allen möglichen Sonderzeichen im Namen, was von der Datenbank bei SELECT-Abfragen nicht beachtet wird (zB. zeigt eine suche nach einem Begriff mit ß auch Datensätze mit s an, oder Å = a usw.). Also habe ich lange rumprobiert und nun als "einfachste" bzw. schnellste Lösung (nachdem ich alle möglichen anderen Zeichensätze durchprobiert habe) auf binäre Kollation umgestellt. Damit funktionieren natürlich wiederum andere Dinge nicht (Abfragen mit LIKE) o.ä.
      Warum sollte LIKE nicht funktionieren?

      Wie wäre es, wenn du mal ein vollständiges Beispiel inkl Tabellenstruktur und Beispieldaten als SQL-Code zeigst?

      Das Thema hat übrigens nichts mit PHP zu tun.

      MOD: Verschoben von PHP-Einsteiger

      Kommentar


      • #4
        Heyho.

        leider ist die erste Antwort auf meine Frage gelöscht oder geändert worden? Trotzdem an dieser Stelle vielen Dank für die Tipps und Infos die dort enthalten waren, das hat mir schon um Einiges weiter geholfen. Die anderen beiden Beiträge waren jetzt nicht sonderlich hilfreich, aber auch euch vielen Dank, vielleicht habe ich mich dann doch einfach zu ungenau ausgedrückt.

        Die Lösung war für mich ganz einfach: ich habe nachdem ich das Infomaterial durchgelesen habe, die Kollation wieder auf standard gestellt und vergleiche nun per PHP dort wo ich es brauche die Strings (also das Suchergebnis) auf exakte Übereinstimmung mit dem Suchbegriff. Ich dachte die Datenbank könnte das für mich erledigen, aber da das offensichtlich nicht Funktioniert habe ich so meine Lösung gefunden. So schaut das ganze aus:

        Und nebenbei als Info, falls es überhaupt interessiert ^^: Natürlich speichere ich Passwörter nicht unverschlüsselt ab (wie kommst du überhaupt auf die Idee, davon war nie die Rede?)
        Auch wollte ich nie einen Login mit einer LIKE-Abfrage realisieren, es ging um andere Funktionen der Webseite.
        Mit einer Binären Tabellenkollation funktionieren bei mir tatsächlich keine LIKE-Abfragen (habe es ausgiebig getestet).

        Die Lösung brachte auf jeden Fall mein PHP-Skript und nicht die Datenbank, also ob das ganze jetzt mehr mit PHP oder mehr mit SQL zu tun hat lasse ich mal dahingestellt

        Nochmals vielen Dank für die Infos,
        Liebe Grüße.

        edit:
        Ich wollte das Skript einfügen, aber das sah nach dem Absenden irgendwie Grausam aus (alles in einer Zeile). Also lasse ich es.

        Kommentar


        • #5
          Zitat von johnnybgoode Beitrag anzeigen
          Mit einer Binären Tabellenkollation funktionieren bei mir tatsächlich keine LIKE-Abfragen (habe es ausgiebig getestet).
          Was genau heißt "funktioniert nicht"?

          Kommentar


          • #6
            Auch wenn ich mich nun unbliebt mache:

            Laut Duden:
            Funktionieren:
            intakt sein und durch Zusammenwirken bestimmter [technischer] Vorgänge die Funktion erfüllen.

            Zu meiner Aussage:
            Eine Abfrage mittels SELECT funktioniert für mich dann, wenn ich ein Suchergebnis erhalte (insofern denn eines möglich ist).

            Ein Vorschlag zur Güte:
            Wie wäre es denn wenn du mir Infos oder irgendeine Form der Hilfestellung anbietest, wenn du denn merkst, dass ich mich mit einem Thema (deiner Meinung nach) nicht zur Genüge ausseinandergesetzt habe?
            Wie gesagt ich bin Anfänger und kein Profi, ich schreibe hier in der Hoffnung, dass mir geholfen wird. Wenn nicht, ist das auch nicht weiter schlimm, viele Wege führen nach Rom.
            Nur deine Nachfragen scheinen mir eher dem Selbsterhaltungszweck (oder unterhaltungszweck ^^) zu dienen, als dass du wirklich interessiert wärst jemandem zu helfen.

            Beispiele für Umgangsformen, die nicht Antipathie hervorrufen (eventuell besonders Interessant für einen Moderator einer Internetgemeinschaft):

            "Hey, cool dass du dein Problem gelöst hast, so wie ich das sehe, hast du allerdings Wissenslücken was XYZ angeht."
            "Du hast Probleme deinen Code hier einzufügen? So geht es richtig:"
            "Willkommen im Forum! Dein Beitrag gehört weniger ins PHP Forum, daher habe ich ihn verschoben"
            "Natürlich funktioniert eine LIKE abfrage in dem Falle, und zwar so: (Beispiel einfügen)"
            ...

            Aber vielleicht erwarte ich generell einfach zu viel Sozialkompetenz, oder zumindest die Fähigkeit eine "normale" Konversation führen zu können ^^

            Liebe Grüße.

            Kommentar


            • #7
              Zitat von johnnybgoode Beitrag anzeigen
              Auch wenn ich mich nun unbliebt mache:

              Laut Duden:
              Funktionieren:
              intakt sein und durch Zusammenwirken bestimmter [technischer] Vorgänge die Funktion erfüllen.

              Zu meiner Aussage:
              Eine Abfrage mittels SELECT funktioniert für mich dann, wenn ich ein Suchergebnis erhalte (insofern denn eines möglich ist).

              Ein Vorschlag zur Güte:
              Wie wäre es denn wenn du mir Infos oder irgendeine Form der Hilfestellung anbietest, wenn du denn merkst, dass ich mich mit einem Thema (deiner Meinung nach) nicht zur Genüge ausseinandergesetzt habe?
              Wenn du bei einer Autowerkstatt anrufst, sagst du dann auch einfach nur "mein Auto funktioniert nicht" und verrätst ja kein Detail darüber, was genau nicht funktioniert? Also ob der Motor nicht anspringt? Oder ob die Kupplung rutscht? Oder ob irgendwelche Warnlampen leuchten?

              Die Werkstatt wird dir das natürlich aus der Nase ziehen, aber die bekommt auch Geld dafür, wenn sie einen neuen Reparaturauftrag an Land zieht.

              In einem Forum sollte man sich aber nicht alles aus der Nase ziehen lassen. Wenn etwas nicht funktioniert ist das Mindeste, dass man Beispielcode liefert, bei dem das Fehlverhalten nachvollziehbar auftritt. Das ist der Fragende den anderen schuldig.

              Es ist nicht die Aufgabe der anderen sich blind durch einen unbekannten Code zu tasten, auch wenn das hier leider auf Grund von unvollständigen Fragestellungen hier das ein oder andere mal gemacht wird.

              Kommentar


              • #8
                Ich bezahle hier niemanden dafür, ich habe lediglich eine Frage gestellt. Wenn es dich nicht interessiert zu helfen, warum machst du dir die Mühe und postest?

                Ich bin dir absolut nichts schuldig, ich habe nie jemanden darum gebeten für mich Code zu schreiben oder meinen Code auf Fehler zu korrigieren. Ich habe nach Tabellenkollationen gefragt und mein Problem so genau es mir möglich war beschrieben.

                Aber auf den Verdacht hin, dass du meinen Post garnicht so wirklich gelesen hast hier nochmal meine Frage:

                Kann mir da eventuell jemand einen Denkanstoß geben wie ich es realisieren kann, dass sowohl Benutzer (oder andere von Benutzern eingegebenen Daten) was Sonderzeichen angeht eindeutig sind, als auch case insensitive bzw so gespeichert werden, dass "ungenauere" Suchanfragen akzeptiert werden? Ist das alleine mit der Datenbank zu realisieren, oder gibt es da eventuell einen workaround mittels PHP?
                Diese Frage wurde vom ersten Schreiberling bereits beantwortet und mit einer Fülle an Infos und Links zum selbst nachschlagen belegt (wie gesagt leider gelöscht oder geändert). Das Thema ist damit komplett erledigt. Danke nochmal an dieser Stelle (unbekannterweise) für die Mühe.

                Du, lieber hellbringer, hast allerdings bisher nichts produktives beigetragen, und vermutlich wirst du es auch nicht mehr tun. Du schaukelst dich an einem Thema hoch, das mich absolut nicht interessiert. Ich habe in einem Nebensatz erwähnt, dass LIKE-Abfragen nicht funktionieren bei einer bestimmten Einstellung. NIEMAND hat danach gefragt, dass du dich darum kümmern musst. Wenn du also kein Geld dafür bekommst (um bei deinem Werkstattbeispiel zu bleiben) wo liegen deine Intentionen? Richtig: Hauptsache irgendetwas von sich geben und ein bisschen Salz reinbringen und vielleicht noch ein bisschen Aufregen und am Ende des Tages laut lachen wie dumm die anderen doch sind. Deinen Typus kenne ich sehr gut.

                Das Thema ist erledigt.
                Freu dich darüber, dass du einen Neuling aus dem Forum vergrault hast und mach weiter, was auch immer du hier so tust.

                p.s.: Tatsächlich habe ich sehr lange in einer Autowerkstatt gearbeitet, und wäre froh gewesen, wenn auch nur ein Kunde mir eine Fehlerbeschreibung gegeben hätte, die equivalent zu meinem ersten Post war. Deine Analogie hinkt. Oder erwartest du, dass ein Werkstattkunde der Werkstatt die Reparaturanleitung für sein Problem mitbringt?

                Kommentar


                • #9
                  Der erste Beitrag ist wohl dem Update zum Opfer gefallen.
                  Siehe dazu auch https://www.php.de/forum/php-de-inte...C3%BCckgesetzt

                  Kommentar


                  • #10
                    Zitat von johnnybgoode Beitrag anzeigen
                    Auch wenn ich mich nun unbliebt mache:

                    Beispiele für Umgangsformen, die nicht Antipathie hervorrufen (eventuell besonders Interessant für einen Moderator einer Internetgemeinschaft):

                    "Hey, cool dass du dein Problem gelöst hast, so wie ich das sehe, hast du allerdings Wissenslücken was XYZ angeht."
                    "Du hast Probleme deinen Code hier einzufügen? So geht es richtig:"
                    "Willkommen im Forum! Dein Beitrag gehört weniger ins PHP Forum, daher habe ich ihn verschoben"
                    "Natürlich funktioniert eine LIKE abfrage in dem Falle, und zwar so: (Beispiel einfügen)"
                    ...

                    Aber vielleicht erwarte ich generell einfach zu viel Sozialkompetenz, oder zumindest die Fähigkeit eine "normale" Konversation führen zu können ^^

                    Liebe Grüße.
                    Hier bin zu 100% bei dir, lese das Forum schon lange, bin aber noch nicht lange Mitglied. Dieser Herr Hellbringer schadet dem Forum eher, als dass er nützlich ist. Viele Neuankömmlinge verlassen das Forum nach der ersten Frage und die echten Profis verschwinden nach und nach. Schade, das war mal ein gutes Forum, ist aber jetzt nur noch seichte ...

                    Kommentar


                    • #11
                      Pfff... Ihr findet hellbringers Antworten abschreckend?
                      Ich sag nur nikosch...

                      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                      Kommentar


                      • #12
                        Gib nur der Spalte für die Usernamen ein binary encoding; der Rest kann normales UTF-8 bleiben. Oder lass in User-Namen nur ASCII-Zeichen zu. Bereits vorhandene User mit andern Zeichen könntest Du umbenennen und anschreiben.

                        Kommentar


                        • #13
                          Zitat von phpsourcerer Beitrag anzeigen
                          Gib nur der Spalte für die Usernamen ein binary encoding
                          Warum sollte er das tun?


                          Kommentar


                          • #14
                            Zitat von lstegelitz Beitrag anzeigen
                            Pfff... Ihr findet hellbringers Antworten abschreckend?
                            Ich sag nur nikosch...
                            Die beiden sind sich hier im Forum, glaube ich, nie begegnet.
                            [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

                            Kommentar


                            • #15
                              Zitat von zorro001
                              Dieser Herr Hellbringer schadet dem Forum eher, als dass er nützlich ist.
                              Das sehe ich mit Sicherheit nicht als einziger anders...

                              Zitat von zorro001
                              Viele Neuankömmlinge verlassen das Forum nach der ersten Frage und die echten Profis verschwinden nach und nach.
                              Das liegt aber weniger an hellbringer als an den neuen Mitgliedern selber. Du hast recht, das Forum hat schon mal bessere Zeiten gehabt, nämlich als jedem noch klar war, dass das hier kein 0815 Forum ist, wo man Fragen stellt, wenn man zu faul ist eine Suchmaschine oder die Doku zu verwenden. Hier auf php.de haben wir einen kleinen Anspruch auf die Fragestellungen, das kann man alles in den Richtlinien nachlesen. Die akzeptiert man mit der Registrierung.

                              Evtl. liegt es ja auch an mir? Denn...
                              [MOD: geschlossen]

                              ps: bzgl. nikosch sollte man sich vielleicht mal die Mühe machen, ein paar Jährchen in dir Vergangenheit zu blicken.
                              Ich denke, dass er nicht ganz unschuldig daran ist, dass hier gewisse Jahre überhaupt alles gelaufen ist.


                              Competence-Center -> Enjoy the Informatrix
                              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                              Kommentar

                              Lädt...
                              X