Ich arbeite mit einer MySQL-Datenbank, die einige Daten importiert hat aus Excel . Die Daten enthalten nicht ASCII Zeichen (Bindestriche usw.) sowie versteckte Wagenrückläufe oder Zeilenvorschübe. Gibt es eine Möglichkeit, diese Datensätze mit MySQL zu finden?
Antworten
Zu viele Anzeigen?Ausgehend von der richtigen Antwort, aber auch unter Berücksichtigung der ASCII-Steuerzeichen, habe ich folgende Lösung gefunden:
SELECT * FROM `table` WHERE NOT `field` REGEXP "[\\x00-\\xFF]|^$";
Es macht dasselbe: Es sucht nach Verletzungen des ASCII-Bereichs in einer Spalte, lässt Sie aber auch nach Steuerzeichen suchen, da es die hexadezimale Notation für Codepunkte verwendet. Da es keinen Vergleich oder keine Konvertierung gibt (im Gegensatz zu @Ollies Antwort), sollte dies auch wesentlich schneller sein. (Vor allem, wenn MySQL die Regex-Abfrage vorzeitig abbricht, was es auf jeden Fall tun sollte).
Außerdem wird vermieden, dass Felder mit einer Länge von Null zurückgegeben werden. Wenn Sie eine etwas längere Version wünschen, die möglicherweise besser funktioniert, können Sie stattdessen dies verwenden:
SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP "[\\x00-\\xFF]";
Es wird eine separate Prüfung auf Länge durchgeführt, um Ergebnisse mit einer Länge von Null zu vermeiden, ohne sie für einen Regex-Durchgang zu berücksichtigen. Abhängig von der Anzahl der Null-Längen-Einträge, die Sie haben, könnte dies deutlich schneller sein.
Beachten Sie, dass, wenn Ihr Standardzeichensatz etwas Bizarres ist, bei dem 0x00-0xFF nicht denselben Werten wie ASCII entspricht (gibt es irgendwo einen solchen Zeichensatz?), dies ein falsches Positiv ergeben würde. Ansonsten, viel Spaß!
- See previous answers
- Weitere Antworten anzeigen