MySQL yükü CSV veri değerleri NULL
Virgül ile ayrılmış olan sayısal değerleri 3 ila 4 sütun içeren bir dosya var. Boş alanları satır sonunda onlar istisna ile tanımlanır:
1,2,3,4,5
1,2,3,,5
1,2,3
Aşağıdaki MySQL tablo oluşturuldu:
------- -------- ------ ----- --------- ------- | Field | Type | Null | Key | Default | Extra | ------- -------- ------ ----- --------- ------- | one | int(1) | YES | | NULL | | | two | int(1) | YES | | NULL | | | three | int(1) | YES | | NULL | | | four | int(1) | YES | | NULL | | | five | int(1) | YES | | NULL | | ------- -------- ------ ----- --------- -------
Verileri MySQL LOAD komutunu kullanarak yüklemek için çalışıyorum:
load data infile '/tmp/testdata.txt' into table moo fields terminated by "," lines terminated by "\n";
Ortaya çıkan tablo:
------ ------ ------- ------ ------ | one | two | three | four | five | ------ ------ ------- ------ ------ | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | ------ ------ ------- ------ ------
Sorun yalan ile gerçeği ne zaman bir alan boş olarak ham veri ve tanımlanmamış, MySQL nedense kullanmaz sütun varsayılan değer (NULL) kullanır ve sıfır. NULL doğru sahada alacağımız eksik olduğunda kullanılır.
Ne yazık ki, herhangi bir yardım mutluluk duyacağız yüzden bu aşamada NULL ve 0 ayırt edebilmek için var.
Teşekkürler S.
edit
HARİTAYI UYARILAR çıktı:
--------- ------ -------------------------------------------------------- | Level | Code | Message | --------- ------ -------------------------------------------------------- | Warning | 1366 | Incorrect integer value: '' for column 'four' at row 2 | | Warning | 1261 | Row 3 doesn't contain data for all columns | | Warning | 1261 | Row 3 doesn't contain data for all columns | --------- ------ --------------------------------------------------------
CEVAP
Bu ne istiyorsun. Eğer yerel değişkeni boş bir dize içeren biter eğer yerel bir değişken dördüncü alan okur, ve sonra BOŞ gerçek alan değeri ayarlar:
LOAD DATA infile '/tmp/testdata.txt'
INTO TABLE moo
fields terminated BY ","
lines terminated BY "\n"
(one, two, three, @vfour, five)
SET four = nullif(@vfour,'')
;
Muhtemelen eğer boş değillerse, o zaman onları değişken okuma ve birden fazla SET ifadeleri, bu gibi olurdu:
LOAD DATA infile '/tmp/testdata.txt'
INTO TABLE moo
fields terminated BY ","
lines terminated BY "\n"
(@vone, @vtwo, @vthree, @vfour, @vfive)
SET
one = nullif(@vone,''),
two = nullif(@vtwo,''),
three = nullif(@vthree,''),
four = nullif(@vfour,'')
;
MySQL benzersiz kısıtlamaları null değ...
En iyi MySQL veri para değerleri depol...
SQL Veri Okuyucu - sütun Null değerler...
MySQL sadece not null değerleri SEÇİN...
Hangi MySQL boolean değerleri saklamak...