MySQL sql-mode

本文探讨了在MySQL中使用NN约束(非空约束)但未设置默认值时可能遇到的问题,特别是在不同的SQL_MODE设置下如何影响数据插入行为。文章还介绍了如何调整SQL_MODE来避免某些类型的错误。

建表语句设了NN 但是不设置default vaule

有些mysql会报错

大部分不会

 

http://www.cnblogs.com/ainiaa/archive/2010/12/31/1923002.html

问题在于sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

改为sql-model为"NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

 

SET GLOBAL sql_mode='NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
 

 

 

对于SQL_MODE的设置,可以在MySQL的配置文件如my.cnf和my.ini中进行,也可以在客户端工具中进行,并且可以分别进行全局的设置或当前会话的设置。下面的命令可以用来查看当前SQL_MODE的设置情况。

  mysql> SELECT @@global.sql_mode\G;

  *************************** 1. row ***************************

  @@global.sql_mode:

  1 row in set (0.00 sec)

  mysql> SELECT @@session.sql_mode\G;

  *************************** 1. row ***************************

  @@session.sql_mode: NO_UNSIGNED_SUBTRACTION

  1 row in set (0.00 sec)
http://tech.it168.com/a2012/0822/1388/000001388401.shtml
### 配置和设置 MySQL `sql-mode` 参数 #### 修改全局 SQL 模式 可以通过修改 MySQL 的配置文件来永久更改服务器级别的 `sql_mode` 设置。对于大多数 Linux 发行版,默认配置文件位于 `/etc/my.cnf` 或者 `/etc/mysql/my.cnf` 中,在 Windows 上则通常是安装目录下的 `my.ini` 文件。 找到 `[mysqld]` 节点并添加或编辑如下行以指定所需的模式: ```ini [mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION ``` 保存更改后重启 MySQL 服务使新设置生效[^1]。 #### 动态调整会话级 SQL 模式 除了通过配置文件静态设定外,还可以临时改变当前连接中的 `sql_mode` 值而不影响其他客户端连接。这适用于不想让改动立即应用到整个系统的场景下。使用 SET SESSION 语句即可实现这一点: ```sql SET SESSION sql_mode='STRICT_TRANS_TABLES'; ``` 此命令仅对该特定会话有效直至断开连接为止[^2]。 #### 清除某些严格条件 有时可能希望移除部分严格的约束以便兼容旧版本的应用程序逻辑或是处理特殊情况。比如去除对日期字段中零值敏感性的控制,可通过以下方式完成: ```sql SELECT @@sql_mode INTO @current_sql_mode; SET SESSION sql_mode = REPLACE(@current_sql_mode,'NO_ZERO_IN_DATE',''); SET SESSION sql_mode = REPLACE(@current_sql_mode,'NO_ZERO_DATE',''); ``` 上述脚本首先获取现有的 `sql_mode` 字符串存入变量 `@current_sql_mode` ,接着两次调用 `REPLACE()` 函数分别去掉两个不想要的选项后再重新赋给 `session sql_mode` 。请注意这种方式同样只作用于单次会话内。 #### 处理常见错误提示 当启用了 `ONLY_FULL_GROUP_BY` 这样的严格规则时可能会遇到类似下面这样的报错信息:“Expression #X of SELECT list is not in GROUP BY clause...”。这是因为查询违反了标准SQL关于分组聚合的要求——所有未被聚集函数处理过的列都应当出现在 `GROUP BY` 子句里。解决办法是在查询语句适当位置加入缺失项至 `GROUP BY` 后面或者利用子查询等方式重构原有表达式结构[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值