2012-07-30 8 views
10

मैंने मैन्युअल रूप से (GASP!) कमांड लाइन पर एक MySQL कमांड दर्ज किया है, और मुझे एक चेतावनी मिली है जिसे मैं समझना भी शुरू नहीं कर सकता। (और इससे पहले कि कोई भी कुछ कहता है, हाँ, मुझे पता है: 1. कमांड लाइन इंटरफेस का उपयोग करना सबसे अच्छा तरीका नहीं है; 2. मेरी तालिका को "TABLE_NAME" नाम नहीं दिया गया है और मेरे कॉलम को "डेट कॉलम" नाम नहीं दिया गया है और मेरा रिकॉर्डआईडी मान नहीं है वास्तव में "1234", 3. शायद मेरे स्तंभ प्रकार TIMESTAMP होना चाहिए, लेकिन अब के लिए, यह नहीं परवैध दिनांक समय मूल्य के लिए अजीब MySQL चेतावनी 1264

चलती है ....) 2 पर तारीख "26 वें जुलाई के लिए एक मूल्य, 2012 में प्रवेश करने का प्रयास कर रहा। : 27 बजे (जीएमटी) ", मैं keyed:

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

मैंने प्राप्त किया:

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

तो, मैंने चाबी:

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

अजीब, मैंने सोचा। तो मैं मेज पहले जाँच की स्तंभ (क्षेत्र) टाइप पुष्टि करने के लिए:

mysql> describe TABLE_NAME; 

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

लेकिन मूल्य डेटाबेस के लिए ठीक से लिखा मिलता है, और न छोटा कर दिया, AFAIK:

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

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

मैं पहले से ही है एक समाधान के लिए StackOverflow.com की खोज की। मैं पहले से ही एक स्पष्टीकरण के लिए Googled है। मैं पहले से ही http://dev.mysql.com/doc/refman/5.5/en/datetime.html पर पढ़ा है, जहां यह कहते हैं:

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'. 

मैं भी है कि यह तिथि या समय है, जिस पर मैं प्रवेश कर रहा था के साथ क्या करने के लिए कुछ था एक मामूली संदेह था, तो मैं बताउंगा कि जिस सर्वर पर डेटाबेस स्थित है, वह प्रशांत डेलाइट टाइम (जीएमटी -8 पर है, अभी डीएमटी के लिए जीएमटी -7 को छोड़कर); मैं ईडीटी पर किसी ग्राहक से लॉग इन (एसएसएच) (जो कोई फर्क नहीं पड़ता); और मैं जीएमटी के रूप में सभी Date_Column मूल्यों को संग्रहीत कर रहा हूं। उस समय मैं "2012-07-26 14:27:00" मूल्य दर्ज कर रहा था, इसके बाद सभी तीन तिथियां ठीक थीं, 7/30/12 को। यह महत्वपूर्ण नहीं है - I भविष्य में त्रुटियों के बिना दिनांक दर्ज करने में सक्षम होना चाहिए - लेकिन सोचा कि यह आपके लिए उपयोगी हो सकता है। तो -

क्यों, ओएच क्यों "2012-07-26 14:27:00" एक ऑफ-ऑफ-रेंज वैल्यू है?

मेरा MySQL क्लाइंट API संस्करण 5.1.4 9 है।

यह पहली बार है जब मैंने कभी स्टैक ओवरफ्लो पर पोस्ट किया है। आपके सुझावों के लिए अग्रिम धन्यवाद।

+0

"समर्थित सीमा '1000-01-01 00:00:00' से 99 99-12-31 23:59:59 'है।" तो मुझे आपके मूल्य के साथ कोई समस्या नहीं दिख रही है ... – Jocelyn

+0

MySQL का कौन सा संस्करण आप चल रहे हैं? – Throdne

+0

@ थ्रोडेन mysql> संस्करण का चयन करें(); संस्करण() 5.1.56-लॉग – user1564318

उत्तर

3

मुझे आश्चर्य है कि यह स्ट्रिंग से कुछ दिनांक प्रारूप में परिवर्तित हो रहा है या नहीं। उस डेटफॉर्मेट के बाद बहुत अधिक सटीकता होगी जिसे छोटा कर दिया जाएगा। असाइन करने से पहले इसे डेटाटाइम पर कास्ट करने का प्रयास करें।

+0

धन्यवाद, मैं कोशिश करूँगा। इस बीच: चेतावनी ने छेड़छाड़ के बारे में कुछ भी नहीं कहा, केवल यह कि मूल्य "सीमा से बाहर" था। (स्टंप।) – user1564318

+0

यह काम किया - कोई चेतावनी नहीं! mysql> अद्यतन TABLE_NAME सेट दिनांक कॉलम = CAST ("2012-07-26 14:27:00" AS DATETIME) जहां RecordID = "1234"; क्वेरी ठीक है, 1 पंक्तियां प्रभावित हुईं (0.07 सेकेंड) पंक्तियों से मिलान: 1 चेतावनी: 0 मुझे अभी भी समझ में नहीं आता कि यह क्यों परिपक्व है, क्यों "परिशुद्धता" भिन्न थी। लेकिन धन्यवाद @ मार्कस – user1564318

संबंधित मुद्दे