ডেটটাইপ টাইপের জন্য এখনই ডিফল্ট মান হিসাবে সেট করুন?


197

আমার কাছে টেবিল ব্যবহারকারীদের দুটি কলাম রয়েছে registerDate and lastVisitDateযার মধ্যে ডেটটাইম ডেটা টাইপ থাকে। আমি নিম্নলিখিতটি করতে চাই।

  1. এখনই মাইএসকিউএল-এ রেজিস্টারডেটের ডিফল্ট মান সেট করুন ()
  2. লাস্টভিসিডিট ডিফল্ট মান সেট করুন এটি ডিফল্টরূপে 0000-00-00 00:00:00ব্যবহার করে নলের পরিবর্তে to

যেহেতু টেবিলটি ইতিমধ্যে বিদ্যমান রয়েছে এবং বিদ্যমান রেকর্ড রয়েছে, আমি পরিবর্তন টেবিলটি ব্যবহার করতে চাই। আমি নীচে দুটি টুকরা কোড ব্যবহার করার চেষ্টা করেছি, কিন্তু কোনটিই কার্যকর হয় না।

ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;

এটি আমাকে ত্রুটি দেয়: ERROR 1067 (42000): Invalid default value for 'registerDate'

আমার পক্ষে কি মাইএসকিউএলে এখনই ডিফল্ট ডেটটাইম মান সেট করা সম্ভব?


4
ALTER TABLE users MODIFY dateTime timestamp default CURRENT_TIMESTAMPdata typeআপনার উভয় প্রয়াসে আপনি ক্ষেত্রের ক্ষেত্রটিকে সংজ্ঞায়িত করেননি
শক্তি সিং

3
যেহেতু মাইএসকিউএল 5.6 এর DATEডিফল্ট মান নিয়ে কাজ করা উচিতNOW()
AbcAeffchen

এই mysql 5.6 ডকুমেন্টেশন অনুসারে: dev.mysql.com/doc/refman/5.6/en/data-type-defaults.html , আপনি ডিফল্ট হিসাবে CURRENT_TIMESTAMP () ব্যবহার করতে পারেন।
blacktie24

আমি কীভাবে CURRENT_TIMESTAMP + 1 দিন বাস্তবায়ন করব
ইলকার বাল্টাচি

উত্তর:


241

মাইএসকিউএল 5.6.5 হিসাবে, আপনি DATETIMEগতিশীল ডিফল্ট মান সহ ধরণটি ব্যবহার করতে পারেন :

CREATE TABLE foo (
    creation_time      DATETIME DEFAULT   CURRENT_TIMESTAMP,
    modification_time  DATETIME ON UPDATE CURRENT_TIMESTAMP
)

বা এমনকি উভয় নিয়ম একত্রিত:

modification_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

তথ্যসূত্র:
http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html http://optimize-this.blogspot.com/2012/04/datetime-default- હવે- finally-
উপলভ্য .html

5.6.5 এর আগে আপনাকে TIMESTAMPডেটা টাইপ ব্যবহার করতে হবে যা রেকর্ডটি সংশোধিত হয়ে গেলে স্বয়ংক্রিয়ভাবে আপডেট হয়। দুর্ভাগ্যক্রমে, তবে, কেবলমাত্র এক TIMESTAMPটেবিল অনুযায়ী স্বয়ংক্রিয় আপডেট হওয়া ক্ষেত্র উপস্থিত থাকতে পারে।

CREATE TABLE mytable (
  mydate TIMESTAMP
)

দেখুন: http://dev.mysql.com/doc/refman/5.1/en/create-table.html

আপনি যদি মাইএসকিউএলকে টাইমস্ট্যাম্প মানটি আপডেট করা থেকে বিরত রাখতে চান UPDATE(যাতে এটি কেবল চালু হয় INSERT) আপনি সংজ্ঞাটি এতে পরিবর্তন করতে পারেন:

CREATE TABLE mytable (
  mydate TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)

80
আমি সত্যিই টাইমস্ট্যাম্প ব্যবহার করতে চাই না।
ইব্রাহিম আজাহার আরমার

2
@ ইব্রাহিম: টাইমস্ট্যাম্প আপনার একমাত্র সুযোগ। আপনি যদি ডেটটাইম ক্ষেত্র ব্যবহার করেন তবে আপনাকে এখন () ব্যবহার করে রেকর্ড সন্নিবেশ করতে হবে।
নিকোলা কোসু

9
ম্যানুয়াল স্পষ্ট ভাষায় বলে: "এর অর্থ, উদাহরণস্বরূপ, আপনি কোনও ডিফল্ট সেট করতে পারবেন না কোনও তারিখ কলামের জন্য NOW () বা CURRENT_DATE এর মতো কোনও ফাংশনের মান হিসাবে" "
নিকোলা কোসু

19
@ জোহান DATETIMEপ্রায়শই এটি ধারণ করতে পারে এমন রেঞ্জটি করা পছন্দ করে: '1000-01-01 00:00:00' থেকে '9999-12-31 23:59:59 TIMESTAMPS' এর ' 1970' এর তুলনায় 1970-01-01: 00:01 'ইউটিসি থেকে' 2038-01-19 03:14:07 'ইউটিসি। উদাহরণস্বরূপ জন্মের তারিখগুলি বা ভবিষ্যতে 30 বছরেরও বেশি কিছু সঞ্চয় করার উদ্দেশ্যে।
ব্যবহারকারী 17753

5
@ নিকারুলেজ আপনি আর timestampমাইএসকিউএল 5.6 হিসাবে এই আচরণের জন্য সীমাবদ্ধ নন
ড্যান এস্পারজা

70

নতুন সন্নিবেশের জন্য এখন ডেটটাইম ফিল্ড NOW () এ সেট করতে আমি একটি ট্রিগার ব্যবহার করেছি

CREATE TRIGGER `triggername` BEFORE INSERT ON  `tablename` 
FOR EACH ROW 
SET NEW.datetimefield = NOW()

এটি আপডেটের জন্যও কাজ করা উচিত

জোহান এবং লিওনার্দোর উত্তরগুলিতে একটি টাইমস্ট্যাম্প ক্ষেত্রে রূপান্তর করা জড়িত। যদিও এটি সম্ভবত প্রশ্নে উপস্থাপিত ব্যবহারের ক্ষেত্রে ঠিক আছে (রেজিস্টারডেট এবং লাস্টভিসিডিটেট সংরক্ষণ করে) তবে এটি সর্বজনীন সমাধান নয়। দেখুন DATETIME বনাম টাইমস্ট্যাম্প প্রশ্ন।


4
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত তবে এটি নির্দিষ্ট তারিখের ক্ষেত্রের জন্য এটি স্পষ্ট করে তুলতে আপনার এটিকে সম্পাদনা করা উচিত। মূল পোস্টারটি কীভাবে একটি ডেটটাইম ক্ষেত্রের জন্য এটি সমাধান করতে হয় তা জানতে চায় এবং use a timestampআপনি যদি এই দুটি ডেটা ধরণের পার্থক্যটি সত্যিই শিখেন তবে এটি নির্বোধ কাজ।
পিএইচপিগুরু

45

আমার সমাধান

ALTER TABLE `table_name` MODIFY COLUMN `column_name` TIMESTAMP NOT
NULL DEFAULT CURRENT_TIMESTAMP;

এই ডিএফ কাজ করে, আমি সবাইকে এসকিউএলইগ বা এর মতো একটি সরঞ্জাম ব্যবহার করার পরামর্শ দিচ্ছি, এটি আপনাকে একটি সহজ ইন্টারফেসে এই জিনিসটি করতে দেয়।
ব্রিক

27
এটি TIMESTAMPকলামের জন্য এখনও সমাধান । কেউ জিজ্ঞাসা করছিল না TIMESTAMP...
পেট্র পেলার 31'14

2
হ্যাঁ, এটি প্রশ্নের উত্তর নয়। TIMESTAMP DATETIME এ ক্ষেত্রের একটি আলাদা ধরণের।
জন হান্ট

@ লিওনার্দো কীভাবে কেবলমাত্র তারিখটি প্রদর্শন করতে পারি
151291

13

ইউরেকা !!!


যারা মাইএসকিউএলে একটি ডিফল্ট DATETIME মান সেট করার চেষ্টা করে হৃদয় হারাতে পেরেছিলেন তাদের জন্য , আপনি ঠিক কীভাবে অনুভব করেছেন / অনুভব করেছেন তা আমি জানি। সুতরাং এটি এখানে:

`ALTER TABLE  `table_name` CHANGE `column_name` DATETIME NOT NULL DEFAULT 0

সাবধানতার সাথে লক্ষ্য করুন যে আমি 0 এর আশেপাশে একক উদ্ধৃতি / ডাবল উদ্ধৃতি যোগ করিনি


গুরুত্বপূর্ণ আপডেট :

এই উত্তর অনেক আগে পোস্ট করা হয়েছিল। তারপরে, এটি আমার (সম্ভবত সর্বশেষ) মাইএসকিউএল স্থাপনে কাজ করেছে এবং আমি এটি ভাগ করে নেওয়ার মতো অনুভব করেছি। আপনি এখন এই সমাধানটি ব্যবহার করার সিদ্ধান্ত নেওয়ার আগে দয়া করে নীচের মন্তব্যগুলি পড়ুন।


16
এটি প্রত্যাশার উপর নির্ভর করে ... - একটি ডিফল্ট সরবরাহ করা হওয়ায় এই সমাধানটি আপনাকে ক্ষেত্রটি শূন্য করতে দেয়। - এই সমাধানটি ক্ষেত্রটিকে এখন () এ সেট করবে না।
কোডেরিপার

10
এটি মূল প্রশ্নের উত্তর দেয় না; উত্তরটি পরিষ্কারভাবে উল্লেখ করা উচিত।
ম্যাট ব্রাউন

2
সচেতন থাকুন যে ট্র্যাডিশনাল এসকিউএল মোডে NO_ZERO_DATE অন্তর্ভুক্ত রয়েছে, সুতরাং উপরের অংশটি সেই ক্ষেত্রে কাজ করবে না।
এম

প্রদত্ত উত্তরের উপর ভিত্তি করে শোনাচ্ছে যে আপনি যদি DATETIME কে TIMESTAMP হিসাবে ত্যাগ না করেন তবে আপনাকে অবশ্যই ট্রিগার ব্যবহার করতে হবে।
ক্রিস

1
এই সমাধানটির সাথে কিছু এপিস পাগল হবে "ওএমজি এটির একটি জিরো তারিখ! কী হেরিসি! আমরা এইটিকে 'জাভা.লং। তারিখ / সিস্টেম.ডেটটাইমে রূপান্তর করতে পারি না! ওএমজি! -ক্রাশ-"।
Felype

4

mysql 5.6 ডক্স বলে যে CURRENT_TIMESTAMP উভয় TIMESTAMP এবং DATETIME ডেটা টাইপের জন্য ডিফল্ট হিসাবে ব্যবহার করা যেতে পারে:

http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html


হুবহু 5.6.5 থেকে কারণ আমার 5.6.22 আছে এবং এটি 5.6 হ'ল ঘটনাটি কাজ করে না .. খুব খারাপ।
ডেলফাইন

4

সংস্করণ mysql 5.6.5 এবং আরও নতুনতে আপনি সুনির্দিষ্ট তারিখের সময়গুলি ব্যবহার করতে পারেন এবং ডিফল্ট মানগুলিও সেট করতে পারেন। একটি সূক্ষ্ম বিট যদিও আছে, যা ডেটটাইম এবং NOW () ফাংশন কল উভয় যথার্থ মান পাস করতে হয়।

এই উদাহরণ কাজ করে:

    ALTER TABLE my_table MODIFY created datetime(6) NOT NULL DEFAULT NOW(6);

এই উদাহরণটি কাজ করে না:

    ALTER TABLE my_table MODIFY created datetime(6) NOT NULL DEFAULT NOW();

1
`ALTER TABLE  `table_name` CHANGE `column_name` 
    timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
    ON UPDATE CURRENT_TIMESTAMP

আপডেটে টাইমস্ট্যাম্প আপডেট করতে ব্যবহার করা যেতে পারে।


1

"ডিফল্ট 0" ব্যবহার করে সবচেয়ে ভাল উপায়। অন্য মাধ্যম:

    /************ ROLE ************/
    drop table if exists `role`;
    create table `role` (
        `id_role` bigint(20) unsigned not null auto_increment,
        `date_created` datetime,
        `date_deleted` datetime,
        `name` varchar(35) not null,
        `description` text,
        primary key (`id_role`)
    ) comment='';

    drop trigger if exists `role_date_created`;
    create trigger `role_date_created` before insert
        on `role`
        for each row 
        set new.`date_created` = now();

0

এটি মাইএসকিউএল ব্যবহার করে আমার পক্ষে কাজ করেছে:

ALTER TABLE `table_name` MODIFY `column_name` datetime NOT NULL DEFAULT NOW();

0
ALTER TABLE table_name
  CHANGE COLUMN date_column_name date_column_name DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

অবশেষে, এটি আমার পক্ষে কাজ করেছিল!


0
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dateCreated` datetime DEFAULT CURRENT_TIMESTAMP,
  `dateUpdated` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `mobile_UNIQUE` (`mobile`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-1

নিশ্চিত না যে এটি এখনও সক্রিয় কিনা তবে এখানে রয়েছে।

ডিফল্টগুলি এখন () এ সেট করার বিষয়ে, আমি DATETIME ডেটা টাইপের জন্য এটি সম্ভব হতে দেখি না। আপনি যদি সেই ডেটা প্রকারটি ব্যবহার করতে চান তবে আপনি যখন সন্নিবেশ করান তখন তারিখটি সেট করুন:

INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', (select now()))

আমার মাইএসকিউএল এর সংস্করণ 5.5


7
হিসাবে সরলীকৃত করা যেতে পারে:INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', NOW())
ব্যবহারকারী 17753

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