{"id":1061,"date":"2011-05-11T13:13:13","date_gmt":"2011-05-11T11:13:13","guid":{"rendered":"http:\/\/hjacob.com\/blog\/?p=1061"},"modified":"2011-05-11T13:13:13","modified_gmt":"2011-05-11T11:13:13","slug":"csv-in-mysql-einlesen","status":"publish","type":"post","link":"https:\/\/hjacob.com\/blog\/csv-in-mysql-einlesen\/","title":{"rendered":"CSV in MySQL einlesen"},"content":{"rendered":"<p>Wenn man gr\u00f6\u00dfere Datenmengen in MySQL einlesen m\u00f6chte, bietet sich ein CSV Import an &#8211; dieser scheint performanter als ein normales SQL Dump zu sein.<\/p>\n<p>Allerdings bietet diese Form des Imports auch einige T\u00fccken &#8211; hier ein paar Tipps wie man es zum Laufen bekommt:<\/p>\n<h2>Generelle Import Syntax<\/h2>\n<p>[code lang=&#8220;sql&#8220;]<br \/>\nLOAD DATA INFILE &#8222;{DATEI_NAME}&#8220; INTO TABLE {TABELLEN_NAME} FIELDS TERMINATED BY &#8218;,&#8216; OPTIONALLY ENCLOSED BY &#8218;&#8220;&#8218; LINES TERMINATED BY &#8218;\\n&#8216; IGNORE 1 LINES;<br \/>\n[\/code]<br \/>\nDabei m\u00fcssen {DATEI_NAME} und {TABELLEN_NAME} angepasst werden. Die \u00fcbrigen Angaben sind weitesgehend optional, aber bei dem konkreten Fall eines CSV Imports notwendig. Die Angaben sind ja weitesgehend selbsterkl\u00e4rend. IGNORE 1 LINES wird verwendet, wenn die erste Zeile die Spaltennamen enth\u00e4lt. In manchen F\u00e4llen ist ein<br \/>\n[code lang=&#8220;sql&#8220;]<br \/>\nLINES TERMINATED BY &#8218;\\r\\n&#8216;<br \/>\n[\/code]<br \/>\nnotwendig (je nach Formatierung des Import-Files).<\/p>\n<h2>NULL-Values<\/h2>\n<p>Wenn das Import-File NULL Werte ohne Anf\u00fchrungszeichen enth\u00e4lt, sollte man die Datei vorher mit vi f\u00fcr den Import optimieren, dazu folgenden Befehl verwenden:<br \/>\n[code lang=&#8220;shell&#8220;]<br \/>\nvi {DATEI_NAME}<br \/>\n:%s\/;NULL\/;&#8220;NULL&#8220;\/g<br \/>\n[\/code]<br \/>\nDadurch werden alle NULL werte in &#8222;NULL&#8220; umgewandelt &#8211; SQL Werte dies dann korrekt als NULL und nicht als String. <\/p>\n<h2>Basic Infos<\/h2>\n<p>Wer noch nicht mit der Unix SQL Shell vertraut ist &#8211; so funktioniert das ganze:<\/p>\n<ul>\n<li>Auf dem Server einloggen<\/li>\n<li>[code lang=&#8220;shell&#8220;]mysql -u {DB_USER} -p[\/code]<\/li>\n<li>Passwort des Datenbank Users eingeben<\/li>\n<li>[code lang=&#8220;sql&#8220;]USE {DB_NAME}[\/code]<\/li>\n<li>Import-Befehl eingeben (s.oben)<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Eine Zusammenfassung wie man CSV (und SSV) Dateien direkt in MySQL einlesen kann, um so gro\u00dfe Datenmengen elegant in der Datenbank abzulegen.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[150],"tags":[157,381,370,323,322],"_links":{"self":[{"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/posts\/1061"}],"collection":[{"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/comments?post=1061"}],"version-history":[{"count":3,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/posts\/1061\/revisions"}],"predecessor-version":[{"id":1064,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/posts\/1061\/revisions\/1064"}],"wp:attachment":[{"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/media?parent=1061"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/categories?post=1061"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/tags?post=1061"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}