2011-09-18 37 views
7

Mỗi lần tôi cố gắng thực hiện một câu lệnh chèn vào dastabase của tôi, tôi nhận được "Giá trị thập phân không chính xác: 'NULL' cho cột 'bounty3' tại hàng 1". Làm thế nào để chèn một giá trị null vào một kiểu dữ liệu thập phân? Tôi có nên đặt giá trị mặc định là 0.00 không?MySQL - Thập phân không thể là NULL

Incorrect decimal value: '' for column 'bounty3' at row 1 Whole query: INSERT INTO songs (userid, wavURL, mp3URL, genre, songTitle, BPM, insWanted, bounty, insWanted2, bounty2, insWanted3, bounty3, insWanted4, bounty4, insWanted5, bounty5, insWanted6, bounty6, insWanted7, bounty7, insWanted8, bounty8, insWanted9, bounty9, insWanted10, bounty10) VALUES ('12534545', '/audio/wav/jqmrgpfcMichael/135259578210secreason.wav', '/audio/mp3/jqmrgpfcMichael/135259578210secreason.mp3', 'Rock/Funk', 'titlee', '120', 'bass', '20.00', 'guitar', '20.00', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '') 

Tôi đã thử tuyên bố này với giá trị NULL quá. Đây là lỗi:

Incorrect decimal value: 'NULL' for column 'bounty3' at row 1 Whole query: INSERT INTO songs (userid, wavURL, mp3URL, genre, songTitle, BPM, insWanted, bounty, insWanted2, bounty2, insWanted3, bounty3, insWanted4, bounty4, insWanted5, bounty5, insWanted6, bounty6, insWanted7, bounty7, insWanted8, bounty8, insWanted9, bounty9, insWanted10, bounty10) VALUES ('12534545', '/audio/wav/jqmrgpfcMichael/143922765110secreason.wav', '/audio/mp3/jqmrgpfcMichael/143922765110secreason.mp3', 'Rock/Funk', 'title', '110', 'bass', '110.00', 'guitar', '20.00', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL', 'NULL') 
+0

Bạn có thể vui lòng cho dán mã/câu lệnh mysql chèn dữ liệu. –

+1

Đảm bảo định nghĩa bảng của bạn cho phép giá trị NULL cho cột đó. Nếu điều đó không giúp hiển thị cho chúng tôi mã của bạn và định nghĩa dữ liệu của bạn. – Eelke

+0

Tôi đã cập nhật với tuyên bố chèn của mình. Tôi đã xóa giá trị 'NULL' và bây giờ tôi nhận được lỗi này. – user547794

Trả lời

5

sử dụng trống, không rỗng, nếu bạn muốn giá trị mặc định.

+0

Tôi đã thử điều này với giá trị NULL quá. Xem bản cập nhật. – user547794

+0

-1 Nếu bạn khai báo cột với giá trị mặc định, việc chèn 'null' sẽ kích hoạt mặc định sẽ được sử dụng. OP có ** không ** khai báo mặc định trên cột 'không null' do đó một lỗi được đưa ra. Chèn trống '''' ** không ** chèn giá trị mặc định. Nó chèn '0'. – Johan

+0

Vẫn còn -1, nhưng dường như OP đang chèn ''null'' vào thập phân và mong đợi MySQL sẽ thấy nó là' null' và không phải là một chuỗi chứa đầy n.u.l.l. – Johan

0

Bạn cần đảm bảo rằng lược đồ cơ sở dữ liệu của bạn cho phép giá trị NULL cho cột đó. Chạy describe <tablename>; trong ứng dụng khách MySQL của bạn để xem lược đồ cho bảng đó là gì.

Nếu lược đồ không cho phép null, bạn có thể sử dụng alter table để thay đổi giản đồ. Đảm bảo bạn không chỉ định NOT NULL cho cột đó và bạn sẽ ổn.

11

Ồ .. bạn đang cố gắng chèn một chuỗi rỗng '' vào bounty3. Thay thế nó bằng NULL. Tôi cũng đã nhận thấy các chuỗi rỗng cho các giá trị số có thể khác, ví dụ: bonty4. Bạn nên thay thế tất cả các chuỗi rỗng bằng NULL cho các giá trị số.

ví dụ: mysql_query ("INSERT INTO empty_number, số VALUES (NULL, 1)");

EDIT: Hey hey nắm được vấn đề, bạn không thể chèn NULL đến một giá trị số như 'NULL' bởi vì đây là một chuỗi, bạn nên chèn như NULL mà không cần bất kỳ dấu ngoặc kép

1

Bạn có thể chạy truy vấn này để cho phép giá trị NULL trong trường 'bounty3'.

ALTER TABLE songs CHANGE bounty3bounty3 DECIMAL (10,0) NULL;

+0

Tôi cho phép NULL trên trường này. Nó dường như không hoạt động cho một kiểu dữ liệu thập phân (mà tôi tin rằng tôi cần cho các giao dịch tài chính ...) – user547794

3

Tôi vừa xử lý vấn đề này trong MySql 5.1.61. Nếu máy chủ ở chế độ nghiêm ngặt, bạn phải nhập 0 thay vì '' cho các trường thập phân. Vô hiệu hóa chế độ nghiêm ngặt cho phép bạn chỉ cần làm '' để điền một giá trị null.

0

Đảm bảo loại trường cho phép giá trị NULL và mặc định là NULL.

Sau đó sử dụng:

UPDATE table_name SET date_field=IF('$date_value'='',NULL,'$date_value') 

này làm việc cho chèn hoặc cập nhật.

Tôi đã thử sử dụng $date_value = NULL và thậm chí tôi đã thử unset($date_value) trước khi chèn hoặc cập nhật và nó không bao giờ hoạt động trên các trường thập phân của tôi. MySQL luôn chuyển đổi chúng thành 0.00. Phương pháp trên là giải pháp duy nhất có hiệu quả đối với tôi.

0

Cảm ơn, nó làm việc bằng NULL khi nói trống:

$conn->bindParam(':'.$valor, ($key[0] ? $key[0] : NULL), PDO::PARAM_STR); 
0

Một lựa chọn khác là để đảm bảo rằng trong dữ liệu nguồn của bạn, các tế bào rỗng hoặc các lĩnh vực chứa 'NULL' trước khi bạn nhập chúng trong MySQL. Bằng cách này, MySQL sẽ nhận ra các trường này là thực sự là NULL và sẽ không chuyển đổi chúng thành 0.

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