[MySQL] LOAD DATA INFILE en UTF-8 tekens

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Ik heb een best wel enorme CSV die ik wil importeren in een tabel, en dat doe ik mbv LOAD DATA INFILE, uiteraard. Volgens SHOW VARIABLES staat alles op utf8 en ook in de query browser is te zien dat de betreffende tabel helemaal utf8 is.

Ik krijg de volgende error:
code:
1
Incorrect string value: '\xF0\xA1\x8E\x9A' for column 'alternatenames' at row 1170974

Het zijn inderdaad een paar miljoen rows en de file is bijna 900MB...
Dus de file met de hand wijzigen is geen optie :P

Dit is de code die ik ervoor gebruik:
SQL:
1
2
3
4
5
6
7
LOAD DATA INFILE 'd:\\upload\\data.txt'
  REPLACE INTO TABLE `locations`
  CHARACTER SET 'utf8'
  FIELDS TERMINATED BY '\t'
  LINES TERMINATED BY '\n'
  (@alternatenames, `veld`, ...)
  SET alternatenames=NULLIF(@alternatenames,'');


Wel heb ik in alle traagheid met een hexeditor een BOM aan de file toegevoegd, maar dat zorgt er alleen maar voor dat mysql er helemaal niets meer van snapt. Ik heb ook geprobeerd CHARACTER SET 'utf8' aan het statement toe te voegen, maar dat maakt niets uit.

Ik neem voor de zekerheid maar aan dat deze karakters wel utf8 karakters zijn, ik zou in ieder geval niet weten wat het anders is. Gezien de herkomst van de file mag ik er vanuit gaan dat de file verder helemaal in orde is.

Maar wat kan ik nu doen om die data in m'n tabel te krijgen?

Wat specs:
Windows Server 2008 R2
MySQL 5.1.52-community
Query browser 1.2.17

Update:
Net nog even geverifiëerd met een hex-editor, en de vier bytes zijn inderdaad geldige utf-8 bytes. Ze staan met z'n vieren voor één chinees karakter, en wel 𡎚 (als dat leesbaar is :P).

[ Voor 6% gewijzigd door _Thanatos_ op 24-11-2010 22:54 ]

日本!🎌


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Aannemen voor de zekerheid :?
_Thanatos_ schreef op woensdag 24 november 2010 @ 22:49:
dat deze karakters wel utf8 karakters zijn
Niet aannemen, uitzoeken.
_Thanatos_ schreef op woensdag 24 november 2010 @ 22:49:
ik zou in ieder geval niet weten wat het anders is
Dan zou ik dat dus eens gaan uitzoeken. Een BOM ergens in metselen maakt 't nog niet meteen een UTF-8 bestand.
_Thanatos_ schreef op woensdag 24 november 2010 @ 22:49:
Gezien de herkomst van de file mag ik er vanuit gaan dat de file verder helemaal in orde is.
Weer een aanname ;)
Assumptions are the mother of all f*ckups ;)


Even wat verder googlen leerde me wel dat er wat issues zijn of geweest zijn:
http://bugs.mysql.com/bug.php?id=10195
http://bugs.mysql.com/bug.php?id=26836
http://bugs.mysql.com/bug.php?id=44411
http://bugs.mysql.com/bug.php?id=20212

^ Ik heb ze nog niet bekeken; deze kwamen als resultaat... Ik ga ze even lezen
Vooral de derde lijkt me even 't lezen waard. Hier ook nog wat leesvoer.

Dit teken zou moeten vallen in het "CJK Extension B" unicode blok.

Wat ik zo snel gevonden denk te hebben is dat MySQL niet overweg zou kunnen met 4-byte chars ("Currently, MySQL support for UTF-8 does not include four-byte sequences") en dat zou pas opgelost zijn in 5.5.3 :? Zo; zelf ook weer wat opgestoken :P

[ Voor 44% gewijzigd door RobIII op 24-11-2010 23:50 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Topicstarter
Dat laatste is eigenlijk het enige dat ik moet weten :)

Maargoed, hoe zal ik dat es gaan oplossen... Hm.

日本!🎌