2012-07-30 23 views
10

Tôi đã nhập bằng tay lệnh (GASP!) Vào lệnh MySQL và tôi đã nhận được Cảnh báo mà tôi thậm chí không thể hiểu được. (Và trước khi bất cứ ai nói bất cứ điều gì, vâng, tôi BIẾT: 1. Sử dụng giao diện dòng lệnh không phải là cách tiếp cận tốt nhất; 2. Bảng của tôi KHÔNG được đặt tên là "TABLE_NAME" và cột của tôi KHÔNG được đặt tên là "DateColumn" và giá trị RecordID của tôi KHÔNG thực sự "1234"; 3. Có lẽ loại cột của tôi nên là TIMESTAMP, nhưng hiện tại, không phải. Đang di chuyển ....)Cảnh báo MySQL 1264 lạ cho giá trị Ngày giờ hợp lệ

Cố gắng nhập giá trị cho ngày "ngày 26 tháng 7 năm 2012 tại 2 : 27 PM (GMT)", tôi keyed:

mysql> update TABLE_NAME set DateColumn="2012-07-26 14:27:00" where RecordID="1234"; 

tôi nhận được:

Query OK, 1 row affected, 1 warning (0.11 sec) 
Rows matched: 1 Changed: 1 Warnings: 1 

Vì vậy, tôi đã khóa:

mysql> show warnings; 
+---------+------+-----------------------------------------------------+ 
| Level | Code | Message            | 
+---------+------+-----------------------------------------------------+ 
| Warning | 1264 | Out of range value for column 'DateColumn' at row 1 | 
+---------+------+-----------------------------------------------------+ 

Lạ, tôi nghĩ. Vì vậy, tôi đã kiểm tra bảng là người đầu tiên khẳng định cột (field) gõ:

mysql> describe TABLE_NAME; 

+------------+----------+------+-----+-------------------+-------+ 
| Field  | Type  | Null | Key | Default   | Extra | 
| DateColumn | datetime | YES |  | NULL    |  | 
+------------+----------+------+-----+-------------------+-------+ 

NHƯNG KHÔNG giá trị được viết đúng cách để cơ sở dữ liệu, và không phải cắt ngắn, AFAIK:

mysql> select * from TABLE_NAME where RecordID="1234"; 

+-----------------------------------------------+ 
| RecordID | Date_Column   | BlahBlahBlah | 
+----------+---------------------+--------------+ 
|  1234 | 2012-07-26 14:27:00 | something.. | 
+----------+---------------------+--------------+ 

Tôi đã đã đã tìm kiếm StackOverflow.com để tìm giải pháp. Tôi đã Googled cho một lời giải thích. Tôi đã đọc lên tại http://dev.mysql.com/doc/refman/5.5/en/datetime.html nơi nó nói:

MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'. 

Tôi thậm chí đã có một sự nghi ngờ nhỏ rằng nó có cái gì để làm với ngày tháng hoặc thời gian mà tôi đã làm cho nhập cảnh; vì vậy tôi sẽ nói rằng máy chủ mà trên đó cơ sở dữ liệu nằm trên Giờ ban ngày Thái Bình Dương (GMT-8, ngoại trừ ngay bây giờ GMT-7 cho DST); Tôi đăng nhập (SSH) từ một khách hàng trên EDT (mà không nên quan trọng); và tôi lưu trữ tất cả các giá trị Date_Column như GMT. Vào thời điểm tôi đã nhập giá trị "2012-07-26 14:27:00" cả ba ngày đều tốt sau SAU, vào ngày 30/7/12. Không phải là vấn đề - tôi nên có thể nhập tương lai ngày mà không gặp lỗi - nhưng nghĩ rằng có thể hữu ích khi bạn biết. So -

TẠI SAO, OH TẠI SAO "2012-07-26 14:27:00" giá trị ngoài phạm vi?

Phiên bản API ứng dụng khách MySQL của tôi là 5.1.49.

Đây là lần đầu tiên tôi đăng trên StackOverflow. Cảm ơn bạn trước cho đề xuất của bạn.

+0

"Phạm vi được hỗ trợ là '1000-01-01 00:00:00' đến '9999-12-31 23:59:59'." Vì vậy, tôi không thấy vấn đề với giá trị của bạn ... – Jocelyn

+0

Bạn đang chạy phiên bản MySQL nào? – Throdne

+0

@Throdne mysql> chọn phiên bản(); Phiên bản() 5.1.56-log – user1564318

Trả lời

3

Tôi tự hỏi nếu nó đang chuyển đổi nó sang một số định dạng ngày từ chuỗi. Định dạng ngày đó sau đó sẽ có quá nhiều độ chính xác sẽ bị cắt ngắn. Thử truyền nó vào một ngày giờ trước khi ấn định.

+0

Cảm ơn bạn, tôi sẽ thử điều đó. Trong khi đó: Cảnh báo không nói bất cứ điều gì về cắt xén, chỉ có giá trị là "ngoài phạm vi". (Stumped.) – user1564318

+0

NÀY LÀM VIỆC - KHÔNG CẢNH BÁO! cập nhật mysql TABLE_NAME đặt DateColumn = CAST ("2012-07-26 14:27:00" AS DATETIME) trong đó RecordID = "1234"; Truy vấn OK, 1 hàng bị ảnh hưởng (0,07 giây) Hàng phù hợp: 1 Đã thay đổi: 1 Cảnh báo: 0 Tôi vẫn không hiểu tại sao lại quan trọng, tại sao độ chính xác lại khác nhau. Nhưng cảm ơn bạn @Markus – user1564318

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