SORU
20 NİSAN 2010, Salı


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
11 Mayıs 2011, ÇARŞAMBA


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,'')
;

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caroline Martin

    Caroline Mar

    19 EYLÜL 2008
  • gsipek

    gsipek

    20 Temmuz 2007
  • Hak5

    Hak5

    7 EYLÜL 2005