Non-breaking whitespace (MySQL): verschil tussen versies
Naar navigatie springen
Naar zoeken springen
(→Niet) |
|||
(4 tussenliggende versies door dezelfde gebruiker niet weergegeven) | |||
Regel 1: | Regel 1: | ||
− | [[file:20191201-0548.png|thumb|Dit | + | [[file:20191201-0548.png|thumb|Dit leek het initiële probleem te zijn: De eerste spatie is geen gewone spatie (<code>0x20</code>), maar ''NBSP'' (''Non-breaking whitespace''): <code>0xc2a0</code>. Hoe fix ik dat?]] |
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. | 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. | ||
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. | ||
+ | == De oplossing == | ||
− | + | Toegevoegd aan de importroutine voor dit bestand: | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<pre> | <pre> | ||
− | + | update tmp | |
+ | set | ||
+ | device_id_org_source = replace(device_id_org_source, unhex("a0"), " "), | ||
+ | device_voltage_org_source = replace(device_voltage_org_source, unhex("a0"), " "), | ||
+ | device_sku = replace(device_sku, unhex("a0"), " "); | ||
</pre> | </pre> | ||
Regel 46: | Regel 36: | ||
* https://stackoverflow.com/questions/41939514/find-non-breaking-space-in-mysql | * https://stackoverflow.com/questions/41939514/find-non-breaking-space-in-mysql | ||
* https://www.w3resource.com/mysql/string-functions/mysql-unhex-function.php | * 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 |
Versie van 1 dec 2019 09:12
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.
De oplossing
Toegevoegd aan de importroutine voor dit bestand:
update tmp set device_id_org_source = replace(device_id_org_source, unhex("a0"), " "), device_voltage_org_source = replace(device_voltage_org_source, unhex("a0"), " "), device_sku = replace(device_sku, unhex("a0"), " ");
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