我有一个包含4个表的数据库,但是我使用的是其中一个与其他表分开的表。
在这个表中,我有4个字段是varchar,其余是int(其他11个字段),当用户填满数据库时,所有内容都被正确保存,但是到目前为止它已经发生了3次,数据库值为int没有任何明显的原因重置为0。起初,我想,这是因为那些字段(数字应该去的地方)是varchars而不是int。但是,自从我改变它以后,它再次发生了。我已经仔细检查了我的代码,我甚至没有任何更新或插入0值。此外,我正在使用codeigniter和活动记录来防止SQL注入并启用XSS过滤,任何人都可以指出我可能缺少的东西或者发生这种情况的原因吗?
另外,我非常肯定这个问题的答案,但有没有办法恢复一些数据?除了不得不要求每个人再次填写所有内容.. = /
**编辑**
存储引擎是MyISAM,而排序规则是latin1_swedish_ci,默认包装密钥,出于所有意图和目的,它是普通的数据库
**编辑**
这是我的表格结构
-- 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 @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@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 :(得分:2)
根据您的描述,听起来您的默认值为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开始,这是整数值的最常见值。
答案 1 :(得分:0)
您使用的是什么SQL_MODE?您至少需要STRICT_ALL_TABLES,但传统和ANSI可能会更好地获得可靠的数据库。
SET SESSION sql_mode='traditional,ansi';
SELECT @@SESSION.sql_mode;