sql >> Databasteknik >  >> RDS >> Mysql

Laravel tidsstämplar för att visa millisekunder

Du kan inte eftersom PHP PDO-drivrutinen inte stöder bråkdelar av sekunder i tidsstämplar. En lösning är att välja tidsstämpeln som en sträng istället så att PDO-drivrutinen inte vet att det verkligen är en tidsstämpel, helt enkelt genom att göra $query->selectRaw(DB::raw("CONCAT(my_date_column) as my_date_column")) Detta betyder dock att du inte kan använda standardval för alla fält, så att fråga blir jobbigt. Du måste också åsidosätta getDateFormat på modellen.

// override to include micro seconds when dates are put into mysql.
protected function getDateFormat()
{
    return 'Y-m-d H:i:s.u';
}

Slutligen i din migrering snarare än nullableTimestamps, utanför Schema callback gör:

DB::statement("ALTER TABLE `$tableName` ADD COLUMN created_at TIMESTAMP(3) NULL");

Observera att det här exemplet gällde 3 decimaler men du kan ha upp till 6 om du vill, genom att ändra 3:an till en 6:a på två ställen, i altertabellen och i sprintf och även justera multiplikatorn * 1000 till 1000000 för 6.

Förhoppningsvis kommer PHP PDO en dag att uppdateras för att fixa detta, men det har gått över 5 år och ingenting har förändrats så jag har inte mina förhoppningar. Om du är intresserad av detaljerna, se denna felrapport:http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format -of-datetime-fields Jag hittade den länken i det här andra svaret som kan hjälpa dig att förstå problemet bättre:https://stackoverflow. com/a/22990991/259521

PHP har verkligen visat sin ålder på sistone, och jag skulle betrakta det här problemet som ett av mina skäl till att överväga att flytta till den modernare Node.js.



  1. Bifoga strängar i enstaka citattecken i SQLite-frågeresultat

  2. Hur man returnerar alla otillförlitliga utländska nyckelbegränsningar i SQL Server (T-SQL-exempel)

  3. Tips för att lagra dina MariaDB-säkerhetskopier i molnet

  4. Hur cbrt() fungerar i PostgreSQL