`

一个因逻辑不兼容引发的惨案

阅读更多
最近新安装了个MySQL最新版本(MySQL 5.5.20)的数据库,是用安装形式的,安装很简单,一切OK后,因接手一项目,导入其数据后在本机测试,数据插入总是有问题,但同样的程序和插入SQL在以前的服务器上就没问题,总是提示类似下面的错误。
mysql>INSERT INTO users SET email="foobar@example.com", username="foobar", password="secret";
ERROR 1364 (HY000): Field 'tags' doesn't have a default value

查看users表结构
mysql> desc users;
+----------------+---------------------+------+-----+---------+----------------+
| Field          | Type                | Null | Key | Default | Extra          |
+----------------+---------------------+------+-----+---------+----------------+
| id             | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| username       | varchar(32)         | NO   | UNI | NULL    |                |
| password       | varchar(32)         | NO   |     | NULL    |                |
| email          | varchar(256)        | YES  | UNI | NULL    |                |
| tags           | varchar(255)        | NO   | MUL | NULL    |                |
+----------------+---------------------+------+-----+---------+----------------+
50 rows in set (0.01 sec)

能够看出tags字段是要求“非空”没有默认值的,而且在插入语句中也没有赋值,看起来应该是插入语句的问题,但在我接手这个项目之前程序一直也是这么跑的,怎么现在在我本机上就不行了呢?找了好久的解决方法(此处略去3000字…)

终于在网上找到了有关这样的说明,原来在MySQL配置文件中有个关于 Server SQL Mode 的设置,而这个设置默认没有特别的模式设置(也就是在my.ini中没有sql-mode="mode"的设置),但我是用安装包来安装,在my.ini中就有了这样的设置
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"


将这条注释掉并重启MySQL服务器,上面的问题就解决了。

更多关于Server SQL Mode的介绍

Server SQL Mode是MySQL应该支持什么样的SQL语法,应该执行什么样的数据验证,这使得MySQL数据库可以在不同的环境和不同的数据库之间一起,以便用于不同的客户端使用。

可以使用
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;


查看使用了哪些模式或在执行中更改模式
mysql> SET sql_mode = '';
mysql> SELECT NOT 1 BETWEEN -5 AND 5;
        -> 0
mysql> SET sql_mode = 'HIGH_NOT_PRECEDENCE';
mysql> SELECT NOT 1 BETWEEN -5 AND 5;
        -> 1


参见:http://dev.mysql.com/doc/refman/5.5/en/faqs-sql-modes.html
分享到:
评论

相关推荐

    一个 curl 配置引发的惨案.doc

    在这篇文章中,我们将探讨一个 curl 配置引发的惨案,並分析 curl 配置对 nvm 安装 node 的影响。 一、问题描述 在安装 node 时,nvm 一直报错,无法解决问题,苦苦 Google 依然无果。这两个天想装新版本的 node,...

    尼罗河上的惨案的逻辑分析.doc

    总的来说,《尼罗河上的惨案》不仅是一个精彩的故事,也是一个展示逻辑推理如何应用于解决复杂问题的实例。它提醒我们在现实生活中,无论面对何种困境,逻辑分析都能够帮助我们拨开迷雾,找到事情的真相。

    parseInt()函数引发的惨案

    然而,由于其特定的行为和潜在的陷阱,它也有可能成为开发过程中的一个“惨案”。在这个主题中,我们将深入探讨`parseInt()`的工作原理、常见问题以及如何避免这些陷阱。 `parseInt()`函数的基本用法是接收两个参数...

    《尼罗河上的惨案》的逻辑分析.doc

    《尼罗河上的惨案》的逻辑分析是对经典电影《尼罗河上的惨案》的深入分析,从人物关系到犯罪动机,从逻辑分析到推理过程,本文将带领读者深入探索电影的每一个细节。 首先,我们对电影中的重要人物进行分析。林内特...

    《尼罗河上的惨案》的逻辑分析.docx

    《尼罗河上的惨案》的逻辑分析对电影中的几个重要人物进行了深入分析,并对波罗的逻辑思维和细致分析系进行了深入剖析。通过对电影的分析,我们可以看到波罗的聪明和敏锐的警惕,最终找到了真正的杀人凶手。

    naturefw#RealProject#一个文档引发的惨案1

    乙看了之后,感觉做成json格式的似乎更好一些,于是改了改。丙看了修改后的json后发现,这个不是和那个Vue的表单组件需要的json很像吗?思路由数据库文档出

    oracle导入导出表时因一个分号引发的惨案

    Oracle 数据库的导入导出是数据库管理中常见的操作,它涉及到数据的备份、迁移和测试环境的构建。...通过不断地学习和实践,我们可以避免类似“分号引发的惨案”这样的问题,提升数据库管理的专业水平。

    初中语文文摘情感一个小虫带来的惨案

    这个故事虽然以“初中语文文摘情感一个小虫带来的惨案”为标题,但实际上讲述的是一则关于明朝时期的一个民间传说,其中包含了多个知识点: 1. **民俗文化**:故事中的“吃虫”风俗反映了地方文化的独特性,人们...

    一次dns缓存引发的惨案

    时间2015年的某个周六凌晨5点,公司官方的QQ群有用户反馈官网打不开了,但有的用户反馈可以打开,客服爬起来自己用电脑试了一下没有问题,就给客户反馈说,可能是自己网络的问题,请过会在试试。早点8点,越来越多的...

    加密的惨剧!慎用文件夹加密软件!

    加密的惨剧!慎用文件夹加密软件! 加密的惨剧!慎用文件夹加密软件!

    小学数学数学故事小数点的造成的惨重代价

    这个由小数点错误引发的惨剧,成为了数学教育中一个重要的案例。它不仅教育人们在学习数学时要注重每一个细节,更是对科学严谨性的一次深刻警示。 故事的起因是飞船在返回地面时,减速降落伞未能如预期般打开。事后...

    分析MySQL中索引引引发的CPU负载飙升的问题

    收到一个mysql服务器负载告警,上去一看,load average都飙到280多了,用top一看,CPU跑到了336%,不过IO和内存的负载并不高,根据经验,应该又是一起索引引起的惨案了。 看下processlist以及slow query情况,发现有...

    “rm”的安全替代品rm-protection.zip

    rm-protection:一个尽可能从根源防止误删的 rm 替代品rm-protection 与原生 rm 完全兼容(事实上它会将参数原封不动地传递给 rm),唯一不同的是,它在执行 rm 前将检查你要删的每一个文件或者目录是否被「保护」。...

    马虎的故事-读后感作文.doc

    画家的两个儿子因为父亲的失误而产生了误解,一个将“马虎”当成了马,一个将“马虎”当成了虎,最终导致了一死一伤的惨剧。这不仅让画家痛心疾首,更让旁观者深刻反思。马虎,这一字眼背后所隐藏的,其实是我们对于...

Global site tag (gtag.js) - Google Analytics