C # Dapper -이 MySql의 문제점은 무엇입니까?

c# dapper mysql

문제

이 줄을 사용하여 데이터베이스 테이블을 만들었습니다.

CREATE TABLE mytable(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
uniquename VARCHAR(256) NOT NULL UNIQUE KEY, creationtime TIMESTAMP, 
updatedtime TIMESTAMP);

다음은 내 dapper-dot-net INSERT OR UPDATE 명령입니다.

const string uniquename = "25975B8F882E7B1DD99116B71C5A8D04";

// Has format "yyyy-MM-dd HH:mm:ss"
string mysqlTimeStampString = DateTime.UtcNow.ToMysqlTimeStampString();

dbConn.Execute(@"INSERT INTO mytable (uniquename, creationtime, 
updatedtime) VALUES (@uniquename, @creationtime, @updatedtime) ON DUPLICATE 
KEY UPDATE updatedtime=@updatedtime;", new { uniquename=uniquename, 
creationtime = mysqlTimeStampString, updatedtime = mysqlTimeStampString });

처음 실행 한 후 select * from mytable \G 하고이 결과를 얻었습니다.

id: 1
uniquename: 25975B8F882E7B1DD99116B71C5A8D04
creationtime: 2016-01-25 00:06:55
updatedtime: 2016-01-25 00:06:55

지금까지 모든 것이 좋았지 만 몇 분 후에 동일한 INSERT 또는 UPDATE를 실행하면 다음과 같은 결과가 나타납니다.

id: 1
uniquename: 25975B8F882E7B1DD99116B71C5A8D04
creationtime: 2016-01-24 19:10:00
updatedtime: 2016-01-25 00:10:00

이것은 다음과 같은 이유로 수수께끼입니다.

  1. 복제본에서는 updatedtime 필드 만 업데이트되지만 creationtimeduplicatetime 필드는 모두 업데이트됩니다. 두 필드가 모두 업데이트되는 이유는 무엇입니까?
  2. mysqlTimeStampString 문자열은 INSERT 또는 UPDATE 명령에 두 번 전달됩니다. 말 그대로 하나의 문자열을 두 번 전달, 그래서 전혀 가능성이 없다 creationtime 동안 현지 시간 updatedtime UTC는이. 어떻게 지구에 그것은 것으로, 중복 업데이트하는 동안, 가능하다 creationtime 그동안 : (00 ~ UTC -5) 현지 시간으로 변환되고 updatedtime UTC로 설정되어 있습니까?

내가 생각할 수있는 가장 좋은 것은 위대한 버그, mysql 버그, 또는 둘 모두가 아니면 내 구문이 틀렸다는 것입니다.

수락 된 답변

  1. create table 문에서 creationtime timestamp firld가 먼저 정의됩니다. 자동 초기화 타임 스탬프 필드 에 관한 mysql의 문서에 따르면 :

기본적으로 첫 번째 TIMESTAMP 열은 명시 적으로 지정되지 않은 경우 DEFAULT CURRENT_TIMESTAMP 및 ON UPDATE CURRENT_TIMESTAMP를 모두 갖습니다.

  1. mysql과 creationtime 필드를 업데이트하는 c # 코드가 아니기 때문에이 값은 mysql 서버의 시계 및 시간대 설정에 따라 설정됩니다.

1 단계에서 링크 된 문서는 이러한 설정을 재정의하여 creationtime 필드가 mysql에 의해 업데이트되지 않도록하는 방법을 설명합니다. 해결책은 인용 단락 바로 아래에 설명되어 있습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow