2011-01-06 3 views
1

랩톱을 통해 로컬 사이트에서 작업했습니다. 테이블이 blog이고 post_id, title, markdown, author, addedmodified이라는 필드가 있습니다.MySQL 쿼리는 내 랩톱에서 작동하지만 서버에서는 작동하지 않습니다.

추가 및 수정 된 필드는 둘 다 DATETIME입니다.

사용자가 블로그 게시물을하게

은, PHP는 성공적으로 쿼리를 실행 : INSERT INTO blog (title, author, markdown, added) VALUES ('BLA', 'BLA', 'BLA', NOW())

내가 phpMyAdmin에 들어갔다 및 작업 결과와 동일한 쿼리를 실행했습니다.

지금 정확한 데이터베이스를 서버에 내 보냈고 DB에 어떤 게시물도 저장되어 있지 않아 phpMyAdmin의 SQL을 통해 실행하려고 시도했지만 오류 Field 'modified' doesn't have a default value이 표시되었습니다.

왜 이런 일이 발생합니까? 내 데이터베이스에서 두 가지 기본값은 None이므로이 문제의 원인이 무엇인지 혼란스러워합니다.

내 랩탑에 PHP 5.3.1 및 MySQL 5.1.41 (XAMPP가 설치되어 있습니다.) 서버에 PHP 5.3.5 및 MySQL 5.5.8이 설치되어 있습니다 (필사적으로 최신 버전을 설치했습니다. 서버는 원래 실행 중이 었습니다. MySQL 5.1 및 PHP의 더 낮은 버전)

이것은 나를 죽이고, 잘만하면이 문제가 무엇인지, 또는 어떻게 고쳐야할지 잘 압니다.

편집 : 여기에 SHOW CREATE TABLE blog 개의 결과가 있습니다.

노트북 :

| blog | CREATE TABLE `blog` (
    `post_id` mediumint(9) NOT NULL AUTO_INCREMENT, 
    `title` varchar(160) NOT NULL, 
    `author` varchar(100) NOT NULL, 
    `markdown` longtext NOT NULL, 
    `added` datetime NOT NULL, 
    `modified` datetime NOT NULL, 
    PRIMARY KEY (`post_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 | 

서버 :

| blog | CREATE TABLE `blog` (
    `post_id` mediumint(9) NOT NULL AUTO_INCREMENT, 
    `title` varchar(160) NOT NULL, 
    `author` varchar(100) NOT NULL, 
    `markdown` longtext NOT NULL, 
    `added` datetime NOT NULL, 
    `modified` datetime NOT NULL, 
    PRIMARY KEY (`post_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 | 

자동 증분 때문에 내 테스트의 다릅니다.

+2

그것은 거의 확실 MySQL의 다른 버전과 관련이있다. 랩탑에 MYSQL 5.5.8을 가져 와서 다시 테스트하고 서버에서 데이터베이스를 가져올 수있는 방법이 있습니까? – JakeParis

+0

두 서버 ('desc blog;')에 'blog'테이블에 대한 설명을 제공 할 수 있습니까? – sfk

+0

@sfk :'desc 블로그'와 비슷한 것으로 추가되었습니다 ('desc 블로그'가 더 좋아 보이는 방식을 좋아합니다 ...) @ JMC : 저는 그 편에 완전히 기대고 있습니다. 그러나 저는 매우 솔직해질 것입니다. 저는 XAMPP가 설치 한 개별 서비스를 업데이트하려고 할 때 좋지 않은 경험을했습니다. 나는 나중에 그것을 시도하고 어떻게되는지 알려줄거야. – NessDan

답변

3
ALTER TABLE blog CHANGE modified modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP; 

은 또는, 드물게, 당신은 당신의 서버에서 MySQL의 buggy 버전이 없을 수도 있습니다.

* 불완전한 구문이있을 수 있습니다. 마지막 페이지에서 ALTER TABLE에 대한 마지막 언급을했습니다.

+0

이것은'0000-00-00 00 : 00 : 00' 형식의 DATETIME을 줄 것인가? 편집 : 나는 그것을 다시 가져, 멋지게 일했습니다! 고맙습니다! – NessDan

0

확인

$ mysqldump --no-data dabasename 

를 사용하여 두 버전에서 DDL을 덤프하고 비교 ((1) 내가 여기에 메모리에 의해 비행하고 있습니다로. 그리고 mysqldump에 대한 매뉴얼 페이지를 확인) 동일한 테이블 설명을 사용하고 있고 두 버전 모두 동일한 엔진을 사용하고 있습니다.

+0

그것도 Windows 서버라고 언급하는 것을 잊었습니다 (또는 그것들에 대한 매뉴얼 페이지도 있습니까?) – NessDan

+0

그 명령을 실행했지만 나머지 명령은 실행되었습니다. (내 게시물에서 업데이트를 볼 수 있습니다. – NessDan

1

먼저 랩톱의 데이터가 서버의 데이터와 정확히 같습니까? 어쩌면 노트북에서이 오류가 발생하지 않을 수도 있습니다. 기본값은 랩톱 테이블에 서버가 아닌 어떻게 든 설정되어 있기 때문입니다. 데이터를 내 보낸 방법과 관련된 문제 일 수 있습니다.

당신이 말할 때, 디폴트는 "None"입니다. 당신은 NULL을 의미합니까, 아니면 사실상 "None"이라는 단어입니까?

두 필드가 모두 datetime 필드 인 경우 기본값을 NOW()로 설정하거나 기본적으로 실제 날짜와 시간을 사용하지 않으려면 "0000-00-00 00:00:00"과 같은 문자열을 사용하십시오 "또는 JDBC 친화적 인"0001-01-01 00:00:00 ".

는 mysqlclient에서 다음 명령을 사용하여 각 테이블의 구조를 비교 :

SHOW CREATE TABLE blog; 
+0

두 가지 모두 "없음"으로 설정되어 있지만 '0000-00-00 00 : 00 : 00' 문자열을 사용하는 지침을 따랐습니다. vacuuming이 끝나면 더 많은 정보를 게시 할 것입니다 :/ – NessDan

+0

"None"기본값이 없으며 NULL이 있습니다. "없음"은 사용하고있는 클라이언트 프로그램이 당신에게 알려주거나 "SHOW CREATE TABLE blog"결과를 볼 때 표시되는 기본값입니까? 또한 해당 필드가 NOT NULL로 설정되어 있고 기본값이 없으면 응용 프로그램에서 항상 새 필드가 생성 될 때마다 필드의 기본값을 삽입하지 않는 한이 문제가 계속 발생합니다. –

+0

이것은 "수락 됨"을 보여줍니다 - 최종 답변은 무엇입니까? –

관련 문제