wake-up-neo.net

Umgang mit Nullfeldern beim Exportieren von MYSQL-Tabellen nach CSV

Im Moment, wenn ich MYSQL-Tabellen in CSV-Dateien exportiere, erhalte ich\N für NULL-Felder in der Datenbank, was erwartet wird. Gibt es eine Möglichkeit, die\N-Ausgabe beim Exportieren von Tabellen nach csv in eine leere Zeichenfolge zu ändern?

Vielen Dank

SELECT 'CU_CustomerID','CU_UserName','CU_Password','CU_Email','CU_Company','CU_Comment','CU_LastBasket','CON_FirstName','CON_MiddleI','CON_LastName','CON_Address1','CON_Address2','CON_City','CON_State','CON_Province','CON_Country','CON_Zip','CON_Phone1','CON_Phone2'
UNION
SELECT T1.CU_CustomerID,T1.CU_UserName,T1.CU_Password,T1.CU_Email,T1.CU_Company,T1.CU_Comment,T1.CU_ShopperPoints,T2.CON_FirstName,T2.CON_MiddleI,T2.CON_LastName,T2.CON_Address1,T2.CON_Address2,T2.CON_City,T2.CON_State,T2.CON_Province,T2.CON_Country,T2.CON_Zip,T2.CON_Phone1,T2.CON_Phone2
FROM CUSTOMERS AS T1
INNER JOIN CONTACT AS T2 ON T1.CU_CustomerID = T2.CON_CustomerID
WHERE T1.CU_CustomerID BETWEEN 0 AND 1000
INTO OUTFILE  'customers.csv'
FIELDS TERMINATED BY  ','
ENCLOSED BY  '"'
13
user2700690

Aus MySQL Dokumentation

Wenn das Zeichen FIELDS ESCAPED BY leer ist, werden keine Zeichen maskiert und NULL wird als NULL ausgegeben, nicht als\N. Es ist wahrscheinlich keine gute Idee, ein leeres Escape-Zeichen anzugeben, insbesondere wenn Feldwerte in Ihren Daten eines der Zeichen in der gerade angegebenen Liste enthalten.

11
Jens

Nur für den Fall. Um zu vermeiden, dass "ifnull (var, '') als var" für jede einzelne Variable eingegeben wird, kann Folgendes verwendet werden:

SELECT GROUP_CONCAT(CONCAT("IFNULL(",COLUMN_NAME,",'') AS ", COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '<table name>'
AND TABLE_SCHEMA = '<schema name>'
ORDER BY ORDINAL_POSITION
2
Rustam Guliev

Der harte Weg:-

 SELECT 'CU_CustomerID', 'CU_UserName', 'CU_Password', 'CU_Email', 'CU_Company', 'CU_Comment', 'CU_LastBasket', 'CON_FirstName', 'CON_MiddleI', 'CON_LastName', 'CON_Address1', 'CON_Address2', 'CON_City', 'CON_State', 'CON_Province', 'CON_Country', 'CON_Zip', 'CON_Phone1', 'CON_Phone2' 
 UNION 
 SELECT COALESCE (T1.CU_CustomerID, ' '), COALESCE (T1.CU_UserName,' '), COALESCE (T1.CU_Password,' '), COALESCE (T1.CU_Email,' '), COALESCE (T1.CU_Company,' '), COALESCE (T1.CU_Comment,' '), COALESCE (T1.CU_ShopperPoints,' '), COALESCE (T2.CON_FirstName,' '), COALESCE (T2.CON_MiddleI,' '), COALESCE (T2.CON_LastName,' '), COALESCE (T2.CON_Address1,' '), COALESCE (T2.CON_Address2,' '), COALESCE (T2.CON_City,' '), COALESCE (T2.CON_State,' '), COALESCE (T2.CON_Province,' '), COALESCE (T2.CON_Country,' '), COALESCE (T2.CON_Zip,' '), COALESCE (T2.CON_Phone1,' '), COALESCE (T2.CON_Phone2,' ') 
 VOM KUNDEN ALS T1 
 INNER JOIN CONTACT AS T2 ON T1.CU_CustomerID = T2.CON_CustomerID 
 WHERE T1.CU_CustomerID ZWISCHEN 0 UND 1000 
 IN OUTFILE 'customers.csv' 
 GEBIETE, BEENDET DURCH ', 
, EINGESCHLOSSEN DURCH' "'

Dadurch werden alle Werte standardmäßig auf eine leere Zeichenfolge anstatt auf NULL ('\ N') gesetzt.

1
Dallas Clarke

Ich hatte auch dieses Problem, wie folgt gelöst:

wählen Sie ifnull (addr.reference, "") AS reference, data2 from ...

0
Jomadee