Non-breaking whitespace (MySQL): verschil tussen versies
Regel 16: | Regel 16: | ||
=== Iets anders? === | === Iets anders? === | ||
− | + | Als ik de betreffende string omfiets naar hex, krijg ik alleen ''a0'', en niet de andere byte. Ik snap niet hoe dat kan. | |
== Niet == | == Niet == |
Versie van 1 dec 2019 09:11
Tijdens verwerken van een UTF-8-import-bestand in MySQL (dec. 2019), bleken sommige spaties geen echte spaties te zijn, maar non-breaking whitespace (of zoiets - zie verderop). Daardoor kon ik die data niet zomaar verwerken, omdat sommige algorithmes ervan uitgingen, dat spaties eh, spaties zijn.
- Hoe herken je NBSP (of andere afwijkende 'spaties') in strings?
- Hoe vervang je NBSP (of andere afwijkende 'spaties') door gewone spaties?
Het probleem: Een spatie is niet een spatie
Er bleken twee problemen te zijn:
NBSP?
Het gaat om een handjevol records in een bepaalde tabel: De betreffende strings bleken geen gewone spaties te bevatten (20
), maar Non-breaking white spaces (c2 a0
). Zie de afbeelding bovenaan dit artikel.
Iets anders?
Als ik de betreffende string omfiets naar hex, krijg ik alleen a0, en niet de andere byte. Ik snap niet hoe dat kan.
Niet
Regular expressions
Filteren mbv. ASCII-codes in regular expressions, lijkt niet zomaar te werken:
select device_sku from device_tmp where device_sku regexp "\x42";
Ongetwijfeld kunnen regular expressions overweg met karaktercodering, maar dit lijkt niet de manier te zijn (met \\\
lukt 't ook niet).
unhex
unhex
lijkt precies te zijn wat ik zoek, behalve dat 't niet lijkt te werken.
select unhex(
Bronnen
- https://stackoverflow.com/questions/5295936/whitespace-in-a-database-field-is-not-removed-by-trim - PHP
- https://stackoverflow.com/questions/15214848/how-do-i-remove-non-breaking-spaces-from-a-column-in-sql-server - Sequel Server!
- https://stackoverflow.com/questions/41939514/find-non-breaking-space-in-mysql
- https://www.w3resource.com/mysql/string-functions/mysql-unhex-function.php
- http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=A0&mode=hex