Tôi có một tệp có thể chứa từ 3 đến 4 cột giá trị số được phân tách bằng dấu phẩy. Các trường trống được xác định với ngoại lệ khi chúng ở cuối hàng:
1,2,3,4,5
1,2,3,,5
1,2,3
Bảng sau đây đã được tạo trong MySQL:
+ ------- + -------- + ------ + ----- + --------- + ------- + | Lĩnh vực | Loại | Không | Chìa khóa | Mặc định | Thêm | + ------- + -------- + ------ + ----- + --------- + ------- + | một | int (1) | CÓ | | NULL | | | hai | int (1) | CÓ | | NULL | | | ba | int (1) | CÓ | | NULL | | | bốn | int (1) | CÓ | | NULL | | | năm | int (1) | CÓ | | NULL | | + ------- + -------- + ------ + ----- + --------- + ------- +
Tôi đang cố tải dữ liệu bằng lệnh MySQL LOAD:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS
TERMINATED BY "," LINES TERMINATED BY "\n";
Bảng kết quả:
+ ------ + ------ + ------- + ------ + ------ + | một | hai | ba | bốn | năm | + ------ + ------ + ------- + ------ + ------ + | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | + ------ + ------ + ------- + ------ + ------ +
Vấn đề nằm ở chỗ, khi một trường trống trong dữ liệu thô và không được xác định, MySQL vì một số lý do không sử dụng giá trị mặc định của cột (là NULL) và sử dụng 0. NULL được sử dụng chính xác khi trường bị thiếu hoàn toàn.
Thật không may, tôi phải phân biệt được NULL và 0 ở giai đoạn này để mọi sự giúp đỡ đều được đánh giá cao.
Cảm ơn S.
biên tập
Đầu ra của SHOW WARNING:
+ --------- + ------ + -------------------------------- ------------------------ + | Cấp độ | Mã | Tin nhắn | + --------- + ------ + -------------------------------- ------------------------ + | Cảnh báo | 1366 | Giá trị nguyên không chính xác: '' cho cột 'bốn' ở hàng 2 | | Cảnh báo | 1261 | Hàng 3 không chứa dữ liệu cho tất cả các cột | | Cảnh báo | 1261 | Hàng 3 không chứa dữ liệu cho tất cả các cột | + --------- + ------ + -------------------------------- ------------------------ +
LOAD DATA
. Xem phần ví dụ SQL d6tstack về thay đổi lược đồ dữ liệu.