2011-02-10 7 views
1

4 개의 테이블을 포함하는 데이터베이스가 있지만 다른 데이터베이스와 구분되어있는 데이터베이스가 1 개 있습니다.데이터베이스 내용 자체를 0으로 설정합니다.

이 테이블에는 사용자가 DB를 모두 채우면 varchar이고 나머지는 int (11 개의 다른 필드)인데, DB가 모두 올바르게 저장되지만 3 번까지 데이터베이스 값 int는 명백한 이유없이 0으로 리셋됩니다. 처음에, 나는 그 숫자 (숫자가 있어야하는)가 ints가 아닌 varchars 였기 때문에 그것이라고 생각했다. 그러나 내가 그것을 바꿨을 때, 그것은 다시 일어났다. 이미 코드를 두 번 확인 했으므로 0 값을 업데이트하거나 삽입하는 것도 없습니다. 또한 나는 codeigniter와 SQL injections로부터 보호하고 XSS 필터링을 활성화 한 활성 레코드를 사용하고 있는데, 누군가가 내가 누락되었거나 일어날 수있는 이유를 지적 할 수 있습니까?

또한이 답변에 대해서는 확신하지만 데이터를 복구 할 수있는 방법이 있습니까? 다른 모든 것을 다시 채우기 위해 모든 사람에게 물어 것보다 .. =/

이 ** 수정 **

스토리지 엔진의 MyISAM과 정렬은 latin1_swedish_ci이다, 팩 키는 기본이고, 그것은의 모든 의도와 목적을 위해 일반 DB

** 편집 **

가 여기에 설명한 것과 내 테이블 구조

-- phpMyAdmin SQL Dump 
-- version 3.3.5 
-- http://www.phpmyadmin.net 
-- 
-- Host: localhost 
-- Generation Time: Feb 10, 2011 at 09:31 AM 
-- Server version: 5.0.51 
-- PHP Version: 5.2.14 

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 


/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8 */; 

-- 
-- Database: `cinesdec_prueba` 
-- 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `Oscar` 
-- 

CREATE TABLE IF NOT EXISTS `Oscar` (
    `Id` int(20) NOT NULL auto_increment, 
    `Nombre` varchar(100) default NULL, 
    `ApPaterno` varchar(100) default NULL, 
    `ApMaterno` varchar(100) default NULL, 
    `Edad` varchar(25) default NULL, 
    `Twitter` varchar(250) default NULL, 
    `Correo` varchar(250) NOT NULL default '', 
    `BestPicture` int(10) unsigned NOT NULL, 
    `ActorLead` int(10) unsigned NOT NULL, 
    `ActorSupport` int(10) unsigned NOT NULL, 
    `ActressLead` int(10) unsigned NOT NULL, 
    `ActressSupport` int(10) unsigned NOT NULL, 
    `Art` int(10) unsigned NOT NULL, 
    `Directing` int(10) unsigned NOT NULL, 
    `Foreing` int(10) unsigned NOT NULL, 
    `Music` int(10) unsigned NOT NULL, 
    `Visual` int(10) unsigned NOT NULL, 
    `Desempate` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`Correo`), 
    UNIQUE KEY `Id` (`Id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=89 ; 
+0

SET GLOBAL general_log = 'ON'; 그가 실행하는 쿼리에 대한 로그를 살펴 보겠습니다. –

+0

임대 서버이고 루트 액세스 권한이 없지만 관리자에게 도움을 요청할 것입니다. =/ – Tsundoku

답변

2

, 그것은 귀하가 기본으로 같은 소리

ALTER TABLE `[table_name]` CHANGE `[column_name]` `[column_name]` INT(10) UNSIGNED NOT NULL; 

:

`[column_name]` INT(10) UNSIGNED NOT NULL DEFAULT '0' 

기본을 제거하려면 다음을 수행하십시오 필드에 대한 t 값은 0

가 당신은 지금처럼 거기에서 기본값으로 테이블을 생성 한

입니다 기본 0 값이 제거됩니다 (제거는 DEFAULT '0'입니다).

0을 보는 이유 : 기본값이 0 일 때 INSERT 문에 필드가 포함되어 있지 않으면 MySQL은 필드에 기본값을 삽입합니다.

테이블을 만들 때 사용한 소프트웨어가 자동으로 0 값을 추가했다고 추측합니다. 일반적으로 관련된 테이블의 ID는 정수 값의 가장 일반적인 값인 1에서 시작하므로 일반적으로 문제가되지 않습니다.

+0

실행 해 보았습니다. 구문 오류가 발생했습니다. 정확히 유감스럽게 생각하는 것이 어디에 있는지 모르겠지만 DB를 다루는 데 정말로 녹슬니다. 또한 이것이 일반적으로 문제가되지 않는다면 왜 지금 나에게 영향을 미칠까요? (왜 이런 일이 일어나는지에 대한 설명을 찾고 있습니다) – Tsundoku

+0

"0을 보았습니다"라는 이유를 참조하십시오. –

+0

구문 오류에 관해서는 테이블과 열 이름을 변경 했습니까? 방금 장소 홀더를 추가했습니다. –

0

어떤 SQL_MODE을 사용하고 있습니까? STRICT_ALL_TABLES 이상이 필요하지만 신뢰할 수있는 데이터베이스를 얻으려면 TRADITIONAL과 ANSI가 더 나을 수도 있습니다.

SET SESSION sql_mode='traditional,ansi'; 
SELECT @@SESSION.sql_mode; 
+0

SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 그게 문제가 되겠습니까? – Tsundoku

+0

나는 아무것도 바꿀 것이라고 생각하지 않는다. NO_AUTO_VALUE_ON_ZERO는 다른 필드가 아닌 auto_increment에 관한 것이다. –

관련 문제