Home >Database >Mysql Tutorial >MySQL模式:Strict Mode_MySQL

MySQL模式:Strict Mode_MySQL

WBOY
WBOYOriginal
2016-06-01 13:27:19964browse

bitsCN.com 刚刚在配置阿里云主机的环境:IIS7.5+PHP5.3+MySQL5.5

安装Mysql过程中遇到Strict Mode的选项,特意料了解了一下,大致如下:

 

一. Strict Mode的描述:
根据 mysql5.0以上版本 strict mode (STRICT_TRANS_TABLES) 的限制:
     1).不支持对not null字段插入null值
     2).不支持对自增长字段插入''值,可插入null值
     3).不支持 text 字段有默认值
eg:
1.看下面代码:(第一个字段为自增字段)
    $query="insert into demo values('','$firstname','$lastname','$sex')";
上边代码只在非strict模式有效,如果是strict模式下就会出错。

2.$query="insert into demo values(NULL,'$firstname','$lastname','$sex')";
   上边代码只在strict模式有效。把空值''换成了NULL.

二. 让数据库支持Strict Mode:
 1.对数据库结构进行以下改进来支持strict mode:
1) 给所有not null字段都设置非null默认值,字符串默认值为 '',数值默认值为 0,日期默认值为 '0000-00-00 00:00:00'
2) 去掉text字段的默认值
3) 规范化改进: 把 title 字段统一改为 varchar(255),把有默认值的null字段改为not null字段

2.如果安装的PHP程序数据库结构关闭Strict mode
1).一个是安装mysql5.0(含以上)版本的时候去掉strict mode。
编辑 my.ini,关闭Strict Mode:
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

2). 另一个就是修改查询语句。例如在
if ($this->dbcharset) {
   @mysql_query("SET NAMES ".$this->dbcharset);
}
后面执行
mysql_query("SET @@sql_mode = ''");

注意确定你使用的是MySQL5 以上版本

mysqli方式类似,就是执行的是
mysqli_query($this->connection_id, "SET @@sql_mode = ''");

 

 

如果安装过程中选择了Strict Mode,如何关闭呢?也专门找了下方法,我建议安装时还是不要选择了!

 

关闭MySQL的strict mode的具体做法:找到MySQL目录下的my.ini,将其中的sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 修改为sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",重新启动 Mysql服务

bitsCN.com
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn