Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मैं एक MySQL डेटाबेस में UTC ISO8601 दिनांक कैसे संग्रहीत करूं?

मुझे लगता है कि आपके दिनांक-समय मानों को DATETIME type प्रकार के क्षेत्र में रखते हुए एक तरह का प्राकृतिक तरीका होगा।

मेरे वर्तमान PHP अनुप्रयोग के साथ मेरे अपने अनुभव से, केवल read / write इस जानकारी से संबंधित संचालन समस्याग्रस्त हो सकते हैं।

संभावित समाधानों में से एक (यह मानते हुए कि आप DATETIME का उपयोग करते हैं डेटा प्रकार) पूरी प्रक्रिया को ठीक से करने के लिए निम्नलिखित दृष्टिकोण हो सकता है:

PHP उपयोग के लिए DATETIME मान पढ़ना

  1. DATETIME प्राप्त करें आपके डेटाबेस के फ़ील्ड उन्हें क्वेरी में रूपांतरित कर रहे हैं '2011-10-02T23:25:42Z' . के रूप में प्रतिनिधित्व स्ट्रिंग करने के लिए DATE_FORMAT . का उपयोग करके MySQL फंक्शन '%Y-%m-%dT%H:%i:%sZ' के साथ स्वरूपण स्ट्रिंग ( DATE_FORMAT को दस्तावेज़ )
  2. इस विशिष्ट प्रारूप में प्राप्त कॉलम मान पढ़ें और इसे PHP में स्ट्रिंग से वास्तविक दिनांक-समय प्रतिनिधित्व में परिवर्तित करें जो PHP के लिए मान्य है (जैसे DateTime क्लास ऑब्जेक्ट्स और DateTime::createFromFormat स्थिर विधि दी गई 'Y-m-d\TH:i:s\Z' स्वरूपण स्ट्रिंग (T और Z स्वरूपण निर्देशों के रूप में व्यवहार करने से बचने के लिए बच गए हैं) (विधि के लिए दस्तावेज़ )।
  3. रूपांतरित मानों को वास्तविक दिनांक-समय मानों के रूप में सभी लागू तर्कों के साथ उपयोग करें, जैसे वास्तविक तिथि तुलना (पाठ-तुलना नहीं), आदि।

MySQL डेटाबेस में PHP दिनांक-समय लिखना

  1. कन्वर्ट यानी PHP DateTime यूटीसी प्रारूप में हमारे आईएसओ 8601 पर क्लास ऑब्जेक्ट DateTime . का उपयोग करके स्ट्रिंग प्रतिनिधित्व क्लास ऑब्जेक्ट का format विधि 'Y-m-d\TH:i:s\Z' . के समान है स्वरूपण स्ट्रिंग (दस्तावेज़ीकरण )।
  2. प्रदर्शन INSERT / UPDATE MySQL फ़ंक्शन STR_TO_DATE के लिए पैरामीटर के रूप में ऐसी तैयार स्ट्रिंग का उपयोग करके डेटाबेस जानकारी पर संचालन ('%Y-%m-%dT%H:%i:%sZ' के साथ स्वरूपण स्ट्रिंग) जो इसे वास्तविक डेटाबेस में परिवर्तित करता है DATETIME मान (STR_TO_DATE को दस्तावेज़ )।

PHP में उदाहरण कोड

नीचे कृपया पीडीओ ऑब्जेक्ट्स का उपयोग करके इस तरह के दृष्टिकोण का एक मसौदा उदाहरण देखें:

$db = new PDO('mysql:host=localhost;dbname=my_db;charset=utf8', 'username', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try {
    // run the query aquring 1 example row with DATETIME data 
    // converted with MySQL DATE_FORMAT function to its string representation 
    // in the chosen format (in our case: ISO 8601 / UTC)
    $stmt = $db->query("SELECT DATE_FORMAT(dt_column, '%Y-%m-%dT%H:%i:%sZ') AS formatted_dt_col"
                        ." FROM your_table LIMIT 1"); 

    if($stmt !== FALSE) {
        $row = $stmt->fetch(PDO::FETCH_ASSOC);

        // convert the acquired string representation from DB 
        // (i.e. '2011-10-02T23:25:42Z' )
        // to PHP DateTime object which has all the logic of date-time manipulation:    
        $dateTimeObject = DateTime::createFromFormat('Y-m-d\TH:i:s\Z', $row['formatted_dt_col']);

        // the following should print i.e. 2011-10-02T23:25:42Z
        echo $dateTimeObject->format('Y-m-d\TH:i:s\Z');  

        // now let's write PHP DateTime class object '$dateTimeObject' 
        // back to the database
        $stmtInsertDT = $db->prepare("INSERT INTO your_table(dt_column) " 
                             . " VALUES ( STR_TO_DATE(:par_formatted_dt_column, '%Y-%m-%dT%H:%i:%sZ') )");

        $dtAsTextForInsert = $dateTimeObject->format('Y-m-d\TH:i:s\Z');

        // convert '$dateTimeObject' to its ISO 8601 / UTC text represantation
        // in order to be able to put in in the query using PDO text parameter
        $stmtInsertDT->bindParam(':par_formatted_dt_column', $dtAsTextForInsert, PDO::PARAM_STR);

        $stmtInsertDT->execute();

        // So the real insert query being perform would be i.e.:
        /*
           INSERT INTO your_table(dt_column) 
           VALUES ( STR_TO_DATE('2011-10-02T23:25:42Z', '%Y-%m-%dT%H:%i:%sZ') )
        */
    }
}
catch(\PDOException $pexc) {
 // serve PDOException
}
catch(\Exception $exc) {
// in case of no-PDOException, serve general exception
}

इस दृष्टिकोण ने मुझे PHP और MySQL डेटाबेस के बीच दिनांक-समय मानों के संचालन में बहुत मदद की।

मुझे आशा है कि यह आपके लिए भी मददगार साबित हो सकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql 3 महीने से अधिक के रिकॉर्ड का चयन करें

  2. FETCHALL के बिना MYSQL PDO में 2 बार कैसे प्राप्त करें?

  3. उस तालिका से चुनें जहां फ़ील्ड शर्तों से मेल नहीं खाती

  4. मैं MySQL में पायथन में शब्दकोशों की सूची डालने के लिए एक्ज़ीक्यूटमैनी का उपयोग कैसे कर सकता हूँ?

  5. MacOSX होमब्रेव mysql रूट पासवर्ड