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?MySQL bietet eine umfassende Zeichensatzverwaltung, die bei dieser Art von Problem helfen kann.
SELECT whatever
FROM tableName
WHERE columnToCheck <> CONVERT(columnToCheck USING ASCII)
En CONVERT(col USING charset)
werden die nicht konvertierbaren Zeichen in Ersatzzeichen umgewandelt. Dann sind der konvertierte und der nicht konvertierte Text ungleich.
Weitere Informationen hierzu finden Sie hier. https://dev.mysql.com/doc/refman/8.0/en/charset-repertoire.html
Sie können jeden beliebigen Zeichensatznamen anstelle von ASCII verwenden. Wenn Sie zum Beispiel herausfinden wollen, welche Zeichen in der Codepage 1257 (Litauisch, Lettisch, Estnisch) nicht korrekt dargestellt werden, verwenden Sie CONVERT(columnToCheck USING cp1257)
Es hängt davon ab, was genau Sie als "ASCII" definieren, aber ich würde vorschlagen, eine Variante einer Abfrage wie diese zu versuchen:
SELECT * FROM tableName WHERE columnToCheck NOT REGEXP '[A-Za-z0-9]';
Diese Abfrage gibt alle Zeilen zurück, in denen columnToCheck irgendwelche nicht-alphanumerischen Zeichen enthält. Wenn Sie andere zulässige Zeichen haben, fügen Sie diese der Zeichenklasse im regulären Ausdruck hinzu. Wenn zum Beispiel Punkte, Kommas und Bindestriche zulässig sind, ändern Sie die Abfrage in:
SELECT * FROM tableName WHERE columnToCheck NOT REGEXP '[A-Za-z0-9.,-]';
Die wichtigste Seite in der MySQL-Dokumentation ist wahrscheinlich 12.5.2 Reguläre Ausdrücke .
- See previous answers
- Weitere Antworten anzeigen