2016-04-29 14 views
0

Ich bin neu in db Welt. Ich sende einen Datetime-Wert wie '2016-04-27 09:00:00' aus dem Java-Programm, um es in der MySQL-Datenbank zu speichern. Meine Frage ist, wie wird dieser Wert in datetime Typ von Feld in mysql db-Tabelle gespeichert werden. Ich meine, ob es als String gespeichert wird, wie ich übergeben habe oder mysql wird die Zeichenfolge analysieren, und erstellt UTC Timestamp daraus und speichern Sie diese Nummer in db. Darüber hinaus wird dieser gespeicherte Wert abgerufen, wie es von Java-Programm ist, unabhängig von verschiedenen Zeitzoneneinstellungen von MySQL-Server und Java-Server?Wie werden Datetime-Werte in MySQL gespeichert?

Sorry für so eine dumme Frage, aber es tut mir sehr weh und wurde nicht einfach und weniger verwirrend Antwort, während der Suche über das Internet.

+0

Dieser Blogeintrag könnte antworten: [Wie wird ein Datum gespeichert?] (Https://www.informit.com/library/content.aspx?b=STY_Sql_24hours&seqNum=93) – Phiter

+0

Native Typen werden in nativen Formaten gespeichert. –

+1

können Sie mehr über "Es tut mir sehr weh und ,,," – Drew

Antwort

2

Der Datetime-Datentyp für mysql 5.6.4 und danach wird wie in der Handbuchseite Date and Time Data Type Representation beschrieben gespeichert. Kurz gesagt, es ist ein 5-Byte-Format einschließlich Sekundenbruchteilen und ist von Zeitzoneninformationen getrennt.

Testtabelle

create table dtTest 
(
    id int auto_increment primary key, 
    dt datetime not null 
); 

insert dtTest (dt) values ('2016-04-27 09:00:00'); 

Wenn man dies bestätigen benötigt, könnte man in einen Hex-Editor der gespeicherten Datei springen und das Big-Endian-Format der Datumzeit überprüfen.

Zeige Variablen wie '% datadir%';

C:\ProgramData\MySQL\MySQL Server 5.6\Data\ 

Traverse in Ordnern und der db-Tabelle (dtTest.ibd)

Es gibt System- und Sitzungsvariablen für Zeitzone:

show variables like '% system_time_zone%';

Eastern Daylight Time 

Zeige Variablen wie '% time_zone%';

SYSTEM 

ich klar sein lassen, dass ich von der Wichtigkeit dieser völlig ahnungslos bin. Hoffentlich kann ein Peer Klarheit schaffen.

SELECT @@ global.time_zone, @@ session.time_zone;

SYSTEM SYSTEM 

-Test ein Reset auf etwas anderes:

SET SESSION time_zone = '+10:00'; 

select * from dtTest;

Beachten Sie, dass die obige Einstellungsänderung die Ausgabe von Daten nicht beeinflusst. Es ist immer noch roh und unabhängig von der Zeitzone.

SET SESSION time_zone = 'America/Chicago'; 

für die oben zu arbeiten, finden Sie unter:

http://dev.mysql.com/doc/refman/5.6/en/mysql-tzinfo-to-sql.html

Ansonsten ohne dass Zeitzone Unterstützung geladen, würde man so etwas durchführen müssen:

SET SESSION time_zone = '+10:00'; 

SELECT @@global.time_zone, @@session.time_zone; 
SYSTEM  +10:00 

Einstellung Sitzung zurück zu meinem Standard:

SET SESSION time_zone = 'SYSTEM'; 

SELECT COUNT(*) FROM mysql.time_zone_name; 

Meine Zahl ist 0, weil ich nicht die Zeitzone Unterstützung Tabelle geladen haben noch

SELECT CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central'); 

- so ist dies für mich NULL. Es ist noch keine Support-Tabelle auf meinem System geladen.

SELECT CONVERT_TZ('2007-03-11 3:00:00','-4:00','-7:00'); 

2007-03-11 00:00:00 - bedeutet, dass 03.00 NYC in San Fran midnite ist

also nicht NULL die oben (weniger freundlich Offsets UTC-Zeit zu lesen Festcodiert.).

SELECT-ID, CONVERT_TZ (dt, '- 4:00', '- 7:00') von dtTest; - dt war mein Spaltenname

1 2016-04-27 06:00:00 

Die obige SELECT-Anweisung den Wert 09.00 Uhr in der db nimmt, kann es von NYC Zeit nach San Fran Zeit umwandelt.

Das ist das Beste, was ich für Sie habe. Hoffentlich kann jemand die fehlenden Details der Zeitzonenunterstützung eintragen.

Verwandte Themen