数据库内容设置为0

数据库内容设置为0

问题描述:

我有一个包含4个表的数据库,但是我使用其中的1个与其他的分开。数据库内容设置为0

在这个表中,我有4个字段,其中是varchar,其余的是整数(11个其他字段),当用户填满数据库时,所有数据都被正确保存,但是它发生了3次,直到数据库值为int没有任何明显的原因重置为0。起初,我想,这是因为那些字段(数字应该去的地方)是varchars而不是ints。但是,由于我改变了它,它又发生了。我已经加倍检查了我的代码,并且我甚至没有更新或插入0值。此外,我使用codeigniter和活动记录防止SQL注入并启用了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';并查看有关他运行的查询日志 – 2011-02-10 07:07:28

+0

这是一个租用的服务器,我没有root权限,但我会要求管理员帮助我=/ – Tsundoku 2011-02-10 07:14:49

从你所描述的东西,这听起来像你defaul为字段的t值是0

您可能已经创建了表中有默认值,就像这样:

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

要删除默认的,请执行下列操作:

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

这将删除默认的0值(注意删除DEFAULT '0')。

您看到0的原因:当默认值为0时,如果您的INSERT语句不包含该字段,则MySQL将只在该字段中插入默认值。

我猜你用来创建表的软件会自动添加0值,这通常不是问题,因为任何相关表的ID将从1开始,这是最常见的整数值。

+0

我试图运行它我得到一个语法错误,我我不确定我在哪里抱歉,但我在处理数据库方面真的很生疏,而且,如果这通常不是问题,那么为什么现在会影响我? (只是寻找一个解释,为什么发生这种情况) – Tsundoku 2011-02-10 07:20:32

你在用什么SQL_MODE?您至少需要STRICT_ALL_TABLES,但TRADITIONAL和ANSI可能会更好地获得可靠的数据库。

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