2013-04-13 28 views
10
DROP TABLE IF EXISTS `transactions`; 
CREATE TABLE `transactions` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `purchase_date` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
INSERT INTO `transactions` (`purchase_date`) VALUES (NULL) 

Tôi đã bị cô lập sự cố trong mã này. Khi tôi chạy nó, tôi nhận được lỗi:"Cột không xác định trong 'danh sách trường'", nhưng cột không tồn tại

[ERROR in query 3] Unknown column 'purchase_date' in 'field list'

Bất cứ ai có ý tưởng?

Trả lời

15

Có một ký tự không thể in 30 (RecordSeparator) được chèn giữa purchase_date' trong tuyên bố INSERT. Chỉ cần loại bỏ các văn bản ('purchase_date') và viết lại nó bằng tay nó phải là tốt.

+0

Điều đó thật lén lút. Cảm ơn. – Rits

+2

làm thế nào bạn nhận được rằng có một nhân vật không thể in được ?? –

+2

Chỉ câm may mắn. Nhấp vào chỉnh sửa, sao chép SQL và dán nó vào một trình soạn thảo cho thấy unprintables. – whetstone

3

Tôi chỉ dành phần tốt hơn trong một ngày để tìm hiểu điều này. Vấn đề của tôi là như nhau: các ký tự vô hình kiboshing truy vấn và trả về lỗi "cột không xác định".

Tôi đã giải quyết nó bằng cách lội ngược trở lại Windows và loại bỏ rác bằng NotePad ++.

Làm thế nào rác có được ở đó ngay từ đầu? Tôi nghĩ rằng đó là vì tôi đã nhầm lẫn khi sao chép một số truy vấn phức tạp dài vào LibreOffice Writer (tài liệu đặc tả chức năng của tôi) thay vì chỉ đánh dấu chúng trong phpMyAdmin hoặc lưu chúng trong trình soạn thảo văn bản. Dán chúng từ LibreOffice vào cửa sổ truy vấn là nơi (tôi nghĩ) rác có nguồn gốc.

Khi ở đó, nó vẫn tồn tại như sốt rét. Tôi thậm chí không thể loại bỏ nó bằng tay-retyping toàn bộ truy vấn - Tôi đã phải đặt nó vào NotePad ++ (Encoding menu) và hiển thị ANSI và combo UTF8 và sau đó loại bỏ các thùng rác bằng tay.

Khi đã xong, truy vấn đã hoạt động.

2

Điều này cũng có thể xảy ra nếu bạn dán tên cột khi xây dựng cấu trúc bảng. Lỗi tương tự - nhưng các ký tự không thể in/vô hình nằm trong cấu trúc bảng chứ không phải truy vấn.

0

Giải pháp thích hợp của Nery khi tôi gặp lỗi này.

Tôi có một nguyên nhân BEFORE INSERT trên bàn của tôi mà đã làm cái gì đó với NEW.`field_mysql_doesnt_think_exists` và nếu tôi đã không vượt qua lĩnh vực đó để một tuyên bố chèn sau đó tôi sẽ nhận được

[ERROR in query 3] Unknown column 'field_mysql_doesnt_think_exists' in 'field list'

0

này có thể không giúp bất cứ ai khác, nhưng thêm "chỉ trong trường hợp" nó giúp một ai đó.

Trong trường hợp của tôi, đó là một giải pháp khác.

Tôi nhận các tập dữ liệu lớn dưới dạng tệp Excel CSV và sử dụng tập lệnh (WIL) để chuyển đổi tệp .csv thành tệp .sql có thể nhập. Tôi đã có một lỗi trong kịch bản của tôi trong đó hai dòng sau không tham chiếu đến tên cùng một bảng (Tôi đã mã hóa cứng vị trí đầu tiên và quên để cập nhật nó):

* "INSERT INTO `old_table_name` (`cid`, `date`, etc etc" 
* "CREATE TABLE IF NOT EXISTS `":_dbName:"` (etc etc " 

Tôi chỉ thay đổi dòng đầu tiên cũng để có được tên bảng từ biến, và thì đấy!

* "INSERT INTO `":_dbName:"` (`cid`, `date`, etc etc" 

Vì vậy hãy kiểm tra hai dòng đó trong tệp SQL nhập của bạn.