2012-02-05 24 views
8

Tôi đang tạo một DB MySQL bao gồm các tập dữ liệu hàng tuần, quay trở lại trong thập kỷ qua. Có một số điểm dữ liệu tồn tại cho các bản ghi gần đây, nhưng không được theo dõi trong một số tập dữ liệu cũ hơn. Các trường trong câu hỏi đều chứa giá trị số nguyên và '0' là giá trị hoàn toàn hợp lệ (và thường xuyên) cho các bản ghi đã theo dõi các điểm dữ liệu. Tôi cần để có thể phân biệt giữa một giá trị của số không và dữ liệu không tồn tại. Vì vậy, tôi cần phải tìm hiểu xem nó có thể lưu trữ một NULL mà không được đại diện như là một '0' (đọc: BLANK CELL) cho một loại INT. Tuy nhiên, giá trị NULL được chuyển tới DB được biểu diễn là '0' (ít nhất, chúng nằm trong phpMyAdmin), có cách nào để thay đổi điều này không?Loại MySQL INT có thể không khác NULL

Cảm ơn sự giúp đỡ của bạn.

+0

Tôi nghĩ bạn nên cho phép cột chứa giá trị null. Nhưng câu trả lời ngắn gọn là: có, các cột int có thể có giá trị NULL. –

Trả lời

11

Bạn có thể đặt giá trị thành NULL. INSERT INTO table (INT_COLUMN) VALUES (NULL) là SQL hợp lệ (với INT_COLUMN là cột int có thể vô hiệu).

+0

Ive đã thử chuyển giá trị dưới dạng trống "" và như NULL, và trong cả hai trường hợp, nó hiển thị là "0" (ít nhất là khi duyệt trong PHPMyAdmin) ... – dgeare

+0

Bạn đã đặt giá trị mặc định của cột thành 0? Dán định nghĩa bảng của bạn tại đây. –

+0

cải thiện câu trả lời của bạn bằng cách thêm định nghĩa của 'nullable' –

2

Có, hãy chắc chắn rằng bảng của bạn được thiết kế để cho phép giá trị NULL trong cột được đề cập. Xem ví dụ rất cơ bản dưới đây:

DROP TABLE IF EXISTS testTable; 
CREATE TABLE `testTable` (
    `id` int(11) unsigned NOT NULL auto_increment, 
    `data` int(11) default NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
; 

INSERT INTO testTable VALUES 
(NULL, 100), 
(NULL, 200), 
(NULL, NULL), 
(NULL, 400); 

SELECT * FROM testTable; 

Các chọn sẽ có kết quả sau:

+----+------+ 
| id | data | 
+----+------+ 
| 1 | 100 | 
| 2 | 200 | 
| 3 | NULL | 
| 4 | 400 | 
+----+------+ 
+0

Mỗi bình luận khác ở đây, nếu bạn có thể cho chúng tôi thấy đầu ra cho câu lệnh "hiển thị tạo bảng ", chúng tôi có thể xác nhận vấn đề của bạn có phải là do định nghĩa bảng hay không. – StudyOfCrying

8

Câu trả lời là "có" - bạn có thể có cột int nullable. Nhưng bạn nên?

Quá thường xuyên, null bị lạm dụng và hiểu lầm. Trong cơ sở dữ liệu SQL, null có nghĩa là "không xác định". Trong trường hợp của bạn, sử dụng null là hoàn hảo, vì vậy "có - bạn nên"

Có những trường hợp khi bạn muốn sử dụng một giá trị cụ thể cho "null", ví dụ -1 cho một số lượng. Cách tiếp cận này là hợp lệ và được sử dụng để đơn giản hóa các mã ứng dụng và SQL, vì đối phó với null trong các truy vấn là một cơn đau ở ass:

  • Bạn phải sử dụng cú pháp đặc biệt "IS NULL"
  • Bất kỳ danh sách chứa một null sẽ không bao giờ phù hợp với bất cứ điều gì , ví dụ như WHERE NAME IN (SELECT COL1 FROM SOMETABLE) sẽ không bao giờ làm việc nếu bất kỳ của các giá trị được chọn là null
  • Null không bất cứ điều gì tương đương khác, thậm chí khác rỗng
  • trong chặt chẽ (ví dụ java) mã ứng dụng, bạn có một kiểm tra rằng một giá trị là null hoặc bạn sẽ nhận được một NullPointerException. Sử dụng giá trị thực tế để tránh điều này
+6

Sử dụng các giá trị "ma thuật" có thể tốt trong trường hợp nhất định nhưng nó cũng có thể là một cơn đau ở mông. Một 'SUM()' hoặc 'AVG()' thông thường sẽ cho kết quả sai nếu bạn có một số giá trị '-1' trong đó. –

2

Nó không bao giờ hết làm tôi ngạc nhiên khi mọi người trả lời câu hỏi mà không thực sự đọc những gì được hỏi. Tôi thấy điều tương tự trong phpMyAdmin. Cho phép null được chọn và nó không cập nhật bản ghi, "IS NULL" hoặc "" hoặc null không hoạt động. Giá trị INT của cột đang được thực thi bởi một cái gì đó .... BTW, nếu ai đó nói Javascript, họ không muốn câu trả lời bằng cách sử dụng 'gạch dưới', JQuery hoặc một số phần mở rộng Javascript khác, bất kỳ câu trả lời nào như vậy sẽ là một hồ sơ tự động -10 !!!

+1

Vì vậy, có vẻ như phpMyAdmin là vấn đề tôi gặp phải. Tôi đã có thể thiết lập giá trị INT cột để NULL trong CLI mysql nhưng không phải trong phpMyAdmin. – Quadrivium

Các vấn đề liên quan