mysql 严格模式 Strict Mode说明

2023-05-16

1.开启与关闭Strict Mode方法

找到mysql安装目录下的my.cnf(windows系统则是my.ini)文件

sql_mode中加入STRICT_TRANS_TABLES则表示开启严格模式,如没有加入则表示非严格模式,修改后重启mysql即可

例如这就表示开启了严格模式:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES


2.Strict Mode功能说明

  • 不支持对not null字段插入null值
  • 不支持对自增长字段插入”值
  • 不支持text字段有默认值


3.例子:

创建数据表方便测试

CREATE TABLE `mytable` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(20) NOT NULL,
 `content` text NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1.not null字段插入null值测试

插入一条记录,name的值为null

在非严格模式下执行

mysql> insert into mytable(content) values('programmer');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from mytable;
+----+------+------------+
| id | name | content    |
+----+------+------------+
|  1 |      | programmer |
+----+------+------------+
1 row in set (0.00 sec)

执行成功,name的值自动转为”

在严格模式下执行

mysql> insert into mytable(content) values('programmer');
ERROR 1364 (HY000): Field 'name' doesn't have a default value

执行失败,提示字段name不能为null值

2.自增长字段插入”值测试

对id字段插入”值

在非严格模式下执行

mysql> insert into mytable(id,name,content) value('','fdipzone','programmer');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from mytable;
+----+----------+------------+
| id | name     | content    |
+----+----------+------------+
|  1 | fdipzone | programmer |
+----+----------+------------+
1 row in set (0.00 sec)

执行成功

在严格模式下执行

mysql> insert into mytable(id,name,content) value('','fdipzone','programmer');
ERROR 1366 (HY000): Incorrect integer value: '' for column 'id' at row 1

执行失败,提示字段id不能为”

mysql> insert into mytable(id,name,content) value(null,'fdipzone','programmer');
Query OK, 1 row affected (0.00 sec)

mysql> select * from mytable;
+----+----------+------------+
| id | name     | content    |
+----+----------+------------+
|  1 | fdipzone | programmer |
+----+----------+------------+
1 row in set (0.00 sec)

字段id为null则可执行成功

3.text字段默认值测试

创建一个数据表mytable,其中text设置默认值default=”

在非严格模式下执行

mysql> CREATE TABLE `mytable` (
    ->  `id` int(11) NOT NULL AUTO_INCREMENT,
    ->  `name` varchar(20) NOT NULL,
    ->  `content` text NOT NULL default '',
    ->  PRIMARY KEY (`id`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> show tables;
+------------------------------+
| Tables_in_test_version       |
+------------------------------+
| mytable                      |
+------------------------------+

执行成功

在严格模式下执行

mysql> CREATE TABLE `mytable` (
    ->  `id` int(11) NOT NULL AUTO_INCREMENT,
    ->  `name` varchar(20) NOT NULL,
    ->  `content` text NOT NULL default '',
    ->  PRIMARY KEY (`id`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ERROR 1101 (42000): BLOB/TEXT column 'content' can't have a default value

执行失败,提示content字段是TEXT类型,不能使用默认值。


总结,使用mysql严格模式可以使数据更加安全严格,缺点是减少了对空数据入库的兼容性。建议开发环境使用严格模式以提高代码的质量及对数据的严谨性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql 严格模式 Strict Mode说明 的相关文章

  • 在重复键上仅更新 Null 或空值

    我有一个 mysql 查询来合并主键 IMO 上的两个表 查询工作正常 但我遇到的问题是在重复键更新时 我只想更新 wp second 表的那些没有值的字段 简而言之 在重复键上 wp second 值仅应在 null 或空时更新 这是我到
  • 从另一列计算出的列?

    给出下表 id value 1 6 2 70 有没有办法添加根据同一个表中的另一列自动计算的列 与 VIEW 类似 但属于同一个表的一部分 举个例子 calculated将是一半value Calculated应该会自动更新value变化
  • 如何在 WHERE 子句中最佳地使用 COALESCE() ?

    这是我的查询 select coalesce qa2 subject qa subject as question subject qa body select count from viewed items vi where coales
  • 2 个使用 jQuery 或 Ajax 的自动完成/建议输入框,第二个框基于多个项目的第一个选择

    我尝试过很多 jquery 和 ajax 自动完成脚本 我发现很难尝试将它们中的任何一个集成到我需要的东西中 让我解释一下我想要实现的目标 我需要 2 个自动完成框 第二个从第一个中提取数据 它们还必须都支持多个条目 查询数据库中的数据 我
  • 更改 Amazon RDS MYSQL Linux 服务器的 innodb_log_file_size 变量值

    我们正在使用 Amazon RDS linux 服务器作为 MYSQL 更改 my cnf 文件变量值的方法是什么 我正在尝试更改 innodb log file size 变量 您能告诉我哪一个是最好的改变方式吗 所以请帮我解决这个问题
  • 使用mysqldump只转储数据,不转储任何表信息

    我正在寻找转储 mysql 数据库中所有数据的语法 我不需要任何表格信息 mysqldump no create info 您也可以使用 skip triggers 如果您使用触发器 no create db 如果您正在使用 databas
  • MySQL记录保存到数据库的当前时间

    我正在使用 Zend Framework 1 12 和 Mysql 我想在数据库中添加列 该列保存记录插入表中时的当前日期时间 有人知道我如何定义此列吗 此功能必须在 Mysql 站点上运行 而不是在 PHP 站点上运行 您必须将列类型更改
  • MySQL 连接丢失:系统错误:110

    我正在尝试通过专用服务器上的 localhost 连接到 mySQL 服务器 但我不断收到错误 Lost connection to MySQL server at reading initial communication packet
  • 在mysql查询中对多个日期范围求和

    我有一个 MySql 表 产品 包含三列 Date Product Qty 我的目标是每周对每种产品的数量进行求和 获取两个给定日期之间的 SUM 很容易 SELECT SUM qty FROM products WHERE date gt
  • 如何对变量使用 GRANT?

    我在 MySql 中使用 GRANT 和变量时遇到一些麻烦 SET username user123 pass pass123 GRANT USAGE ON TO username IDENTIFIED BY pass GRANT INSE
  • 使用 mysql 变量保存用于 where in 子句的逗号分隔值

    我必须运行这样的查询 查询 1 select something from sometable where someId in 1 2 3 我想为 ID 部分保留一个变量 如下所示 查询 2 set myIds 1 2 3 select s
  • 如何给MySQL表添加主键?

    这是我尝试过的 但失败了 alter table goods add column id int 10 unsigned primary AUTO INCREMENT 有人有提示吗 添加列后 您可以随时添加主键 ALTER TABLE go
  • 如何像mysql一样对数组进行排序

    如何对与数据库数据相同的数组进行排序 我请求谷歌分析数据 数据是一个大数组 我想将数组与本地数据库中的一些其他字段连接起来 然后我再次扩展大数组 现在我想对大数组进行排序 这与使用我的 sql 相同 如下所示 select from ga
  • 如何通过列名检查MySqlDataReader中的NULL?

    我怎样才能检查NULL开放的价值MySqlDataReader 以下不起作用 它总是击中else if rdr GetString timeOut null queryResult Egresstime Logged in else que
  • 如何实现复杂的sql命令

    我在 MySQL 中有一个 sql 表 其中包含以下记录 user dob john 1 10 96 jane 3 4 97 jill 1 8 96 jack 2 9 00 jane 12 14 07 john 1 11 98 这是我要执行
  • 如何使用 PHP mysqli 增加 MySQL 中的值

    我在 MySQL 表中有一个整数列 名为col1 现在 我需要的是将其值增加某个数字 例如 1 可能是 2 3 或任何数字 也就是说 如果它的值已经是 10 现在我希望它变成 11 我知道 我可以通过首先选择原始值 用 PHP 增加它 然后
  • 从命令提示符启动mysql服务器时出错

    我是 sql 新手 我安装了 mysql 并且正在阅读这本书 Java 如何编程连接到 mysql 我收到以下错误 关于时间戳 我明白原因 但我正在尝试修复 无法创建测试文件 C Program Files MySQL MySQL Serv
  • SSL 连接在 MySQL Workbench 中有效,但在 DBeaver 中无效

    为当今读者编辑 这是旧版本 DBeaver 中的一个错误 随后已修复 我尝试在 DBeaver 中使用 SSL 连接到 Google Cloud SQL MySQL 实例时遇到 访问被拒绝 错误 我能够 在 MySQL Workbench
  • 未捕获的错误:调用未定义的函数 mysql_connect() [重复]

    这个问题在这里已经有答案了 未捕获错误 调用 C xampp htdocs phoenixproject register php 9 中未定义的函数 mysql connect 堆栈跟踪 0 main 在第 9 行 C xampp htd
  • mysql 密码 使用 PHP 连接到 MySQL

    在使用 PHP 连接到 MySQL 的教程中 您会看到类似于以下内容的内容 pdo new PDO mysql host localhost dbname mydb myuser mypassword 我在本地主机上有一个以这种方式工作的连

随机推荐

  • eclipse 更改编辑器风格方法

    eclipse 更改编辑器风格方法 1 打开eclipse 选择菜单Help gt Install New Software 2 在Work with 中 xff0c 按Add xff0c 然后在Location中填入 xff1a http
  • mongodb 地理位置搜寻

    LBS xff0c 存储每个地点的经纬度坐标 xff0c 搜寻附近的地点 xff0c 建立地理位置索引可提高查询效率 mongodb地理位置索引 xff0c 2d 和2dsphere xff0c 对应平面和球面 1 创建lbs集合存放地点坐
  • php 版本处理类

    php 版本处理类 例如记录app版本 xff0c 或某些版本数据 xff0c 如果使用1 0 0这种版本格式记录入库 xff0c 在需要筛选查询时会比较麻烦 而把版本字符串转为数字保存 xff0c 可以方便版本间的比较和筛选 例如 xff
  • PDO 查询mysql返回字段整型变为String型解决方法

    PDO 查询mysql返回字段整型变为String型解决方法 使用PDO查询mysql数据库时 xff0c 执行prepare execute后 xff0c 返回的字段数据全都变为字符型 例如id在数据库中是Int的 xff0c 查询后返回
  • nginx access.log 忽略favicon.ico访问记录的方法

    favicon ico 文件是浏览器收藏网址时显示的图标 xff0c 当第一次访问页面时 xff0c 浏览器会自动发起请求获取页面的favicon ico文件 当 favicon ico文件不存在时 xff0c 服务器会记录404日志 12
  • php根据地理坐标获取国家、省份、城市,及周边数据类

    功能 xff1a 当App获取到用户的地理坐标时 xff0c 可以根据坐标知道用户当前在那个国家 省份 城市 xff0c 及周边有什么数据 原理 xff1a 基于百度Geocoding API 实现 xff0c 需要先注册百度开发者 xff
  • Mac查看本机IP地址方法

    Mac查看本机IP地址方法 1 使用command 43 shift 43 u 打开实用工具 2 选择 终端 打开 3 输入 ifconfig grep inet grep v 127 0 0 1 显示 inet 开头的那行就是本机的IP地
  • 使用ssh-keygen生成私钥和公钥

    1 使用ssh keygen生成私钥和公钥 命令如下 xff1a ssh span class hljs attribute keygen span span class hljs attribute t span rsa 例子 xff1a
  • 代码简短且隐蔽的后门木马

    本文将介绍一个代码很简短 xff0c 而且很隐蔽的后门木马 xff0c 以便让大家在检测程序时可以避免被挂木马 文件内容如下 xff1a lt php 64 span class hljs variable span 61 span cla
  • H264视频编码原理基础分析

    引言 本文章旨在记录本人学习有关音视频时对H264码流视频编解码原理部分的内容 xff0c 如有不对请留言指出 1 音视频封装格式 我们一般下载或者播放的视频文件常见都是以 xxx mp4 xxx flv xxx mkv等标识结尾 xff0
  • mysql导出查询结果到csv方法

    要将mysql的查询结果导出为csv xff0c 一般会使用php连接mysql执行查询 xff0c 将返回的查询结果使用php生成csv格式再导出 但这样比较麻烦 xff0c 需要服务器安装php才可以实现 直接使用mysql导出csv方
  • MySQL实用工具汇总

    本文收录了mysql相关的实用工具 工具包括 xff1a 性能测试 xff0c 状态分析 xff0c SQL路由 xff0c 及运维开发相关的所有工具 xff0c 并会持续更新 1 工具套件集 percona toolkit oak too
  • php 判断memcache key/value是否存在方法

    1 memcache简介 memcache是一套分布式高速缓存软件 xff0c 用于数据缓存及分布式网站session存储等 使用key 61 gt value方式存储 xff0c 支持数据压缩存储处理及数据过期处理 value只支持str
  • mysql 使用inet_aton和inet_ntoa处理ip地址数据

    本文将介绍如何在数据库中使用合适格式保存ip地址数据 xff0c 并能方便的对ip地址进行比较的方法 1 保存ip地址到数据库 数据库中保存ip地址 xff0c 字段一般会定义为 xff1a span class hljs escape 9
  • git commit 提交注释规范

    本文将介绍使用git commit时的注释规范 xff0c 提高commit内容的可读性及理解 规范说明 xff1a 1 用一空行分隔标题与正文 2 标题使用大写字母 3 标题不超过50个字符 4 标题使用祈使语气 5 标题不要使用句号结尾
  • html5实现摇一摇功能

    原理 xff1a 使用DeviceMotion实现 xff0c 关于DeviceMotion介绍可以查看 https developer mozilla org en US docs Web Reference Events devicem
  • MySql查看与修改auto_increment方法

    本文将介绍如何查看表的auto increment及其修改方法 查看表当前auto increment 表的基本数据是存放在mysql的information schema库的tables表中 xff0c 我们可以使用sql查出 span
  • js遍历获取表格内数据方法

    本文将介绍如何使用js获取表格内某一单元格的内容 xff0c 表格由table tr td等html标记组成 table表示表格 xff0c tr表示行 xff0c td表示行中列 1 一般的表格结构如下 span class hljs t
  • JS生成二维码(兼容各种浏览器及中文)

    本文将介绍如何使用JS生成二维码 xff0c 兼容各种浏览器及手机端 xff0c 支持中文 代码如下 xff1a span class hljs doctype lt DOCTYPE html gt span span class hljs
  • mysql 严格模式 Strict Mode说明

    1 开启与关闭Strict Mode方法 找到mysql安装目录下的my cnf xff08 windows系统则是my ini 文件 在sql mode中加入STRICT TRANS TABLES则表示开启严格模式 xff0c 如没有加入