মাইএসকিউএল 5.6 তারিখের সময় ভুল তারিখের মান: '2013-08-25T17: 00: 00 + 00: 00' ত্রুটি কোড 1292 সহ


15

আমি মাইএসকিউএল 5.6 ব্যবহার করছি এবং আমার একটি প্রোগ্রাম রয়েছে যা আমার ডাটাবেসের বিরুদ্ধে নিম্নলিখিত এসকিউএল বিবৃতি চালায়:

UPDATE `m_table` SET `s_time` = '2013-08-25T17:00:00+00:00' WHERE id = '123' 

অবিস্মরণীয়ভাবে, আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: ভুল তারিখের সময় মূল্য: '2013-08-25T17: 00: 00 + 00: 00' সারি 1 এ 's_Time' কলামের জন্য

এস_টাইমের ডেটাটাইপ হ'ল ডেটটাইম।

আমি ইতিমধ্যে workbench ব্যবহার করে অনুমতি_অনুষ্ঠানিক_ তারিখের সম্পত্তি সেট করার চেষ্টা করেছি।

কেউ কি বুঝতে এবং দয়া করে আমাকে এই ত্রুটিটি ব্যাখ্যা করতে পারেন? আমি জানি যে আমি যদি ম্যানুয়ালি বিবৃতিটি আপডেট m_tableSET s_time= '2013-08-25 17:00:00' WHIDE id = '123' তে পরিণত করি তবে বিবৃতিটি কাজ করে।

দুর্ভাগ্যক্রমে, আমি যে প্রোগ্রামটি এসকিউএল স্টেটমেন্ট সরবরাহ করি তা সংশোধন করতে পারি না (যা আমাকে বলা হয়েছে প্রোগ্রামটির স্রষ্টার দ্বারা বৈধ) এবং আমি এটিও বুঝতে পারি না যে +00: 00 কী প্রতীকী।

ধন্যবাদ

উত্তর:


24
'2013-08-25T17:00:00+00:00'

এটি একটি বৈধ iso-8601 ডেটটাইম মান, তবে এটি কোনও বৈধ মাইএসকিউএল ডেটটাইম আক্ষরিক নয় । সেই সময়ে, বিকাশকারী ভুল is

ডকুমেন্টেশন ব্যাখ্যা করেন কি ALLOW_INVALID_DATESকরে:

মাসটি 1 থেকে 12 এর মধ্যে এবং দিনটি 1 থেকে 31 এর মধ্যে রয়েছে তা কেবল পরীক্ষা করুন Check

অন্য কথায়, 2013-02-31যদি allow_invalid_datesসেট করা থাকে তবে অনুমতিযোগ্য তারিখ হবে । তারিখ বা তারিখের সময়টি মাইএসকিউএলের জন্য কোনও বৈধ বিন্যাসে না থাকলে এই বিকল্পটি কিছুই করে না।

+00:00সময় অঞ্চল থেকে অফসেট হয় ইউটিসি । এই ক্ষেত্রে, সময় প্রকাশ মধ্যে , ইউটিসি তাই অফসেট শূন্য ঘন্টা, শূন্য মিনিট।

আপনার কাজটি হ'ল মাইএসকিউএল 5.6 ইনস্টলেশন প্রক্রিয়া চলাকালীন তৈরি করা কনফিগারেশন ফাইলে এটির একটি ডিফল্ট STRICT_TRANS_TABLESথেকে মুছে ফেলা হবে sql_mode... আপনার এই পরিবর্তনটির কী কী প্রভাব রয়েছে তা সাবধানতার সাথে বিবেচনা করা উচিত তবে এটি ডেটাটিকে প্রবেশ করতে দেয় না।

mysql> select @@sql_mode;
+--------------------------------------------+
| @@sql_mode                                 |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
1 row in set (0.00 sec)

mysql> insert into datetimetest(dt) values ('2013-08-26T12:00:00+00:00');
ERROR 1292 (22007): Incorrect datetime value: '2013-08-26T12:00:00+00:00' for column 'dt' at row 1

-- remove STRICT_TRANS_TABLES -- note that executing this only removes it for your
-- current session -- it does not make a server-wide config change

mysql> set @@sql_mode='no_engine_substitution';
Query OK, 0 rows affected (0.00 sec)

mysql> select @@sql_mode;
+------------------------+
| @@sql_mode             |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec)

-- now MySQL will accept the invalid value, with a warning

mysql> insert into datetimetest(dt) values ('2013-08-26T12:00:00+00:00');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+-----------------------------------------+
| Level   | Code | Message                                 |
+---------+------+-----------------------------------------+
| Warning | 1265 | Data truncated for column 'dt' at row 1 |
+---------+------+-----------------------------------------+
1 row in set (0.00 sec)

-- the value did get inserted, but the time zone information was lost:

mysql> select * from datetimetest;
+----+---------------------+
| id | dt                  |
+----+---------------------+
|  1 | 2013-08-26 12:00:00 |
+----+---------------------+
1 row in set (0.00 sec)

ধন্যবাদ. শেষ পর্যন্ত আমি প্রোগ্রামারকে পিএইচপি কোড পরিবর্তন করতে বলেছি যা এসকিউএল স্টেটমেন্টটি মাইএসকিউএল মান পূরণের জন্য তৈরি করেছিল, তবে এটি একটি আকর্ষণীয় কাজ। আশ্চর্যের বিষয়টি হ'ল মূল এসকিউএল বিবৃতিটি পুরানো মাইএসকিউএল সংস্করণগুলিতে কাজ করে।
অ্যান্ড্রু

2
সহ STRICT_TRANS_TABLESএকটি ডিফল্ট কনফিগারেশন ফাইল কেবল মাইএসকিউএল 5.6, যা ব্যবহার বদলের ব্যাখ্যা ... যদি আপনি এটি সক্রিয় চালু হয় SQL_MODEপূর্ববর্তী সংস্করণে উপস্থিত, ক্যোয়ারী ওই সংস্করণে বিরতি দেবে।
মাইকেল - sqlbot

আপনি সবেমাত্র আমার জীবন বাঁচিয়েছেন। ধন্যবাদ উত্তরের জন্য অনেক!
রাফায়েলস 88
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.