SQL_MODE 和 TIME_ZONE 创建数据库时

SQL_MODE and TIME_ZONE when creating DATABASE

这些选项是什么意思,创建数据库时有哪些可能的选择?

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

#------------------------------------------------------------
#        Script MySQL.
#------------------------------------------------------------

DROP DATABASE if exists BASETEST;
CREATE DATABASE IF NOT EXISTS BASETEST DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;
USE BASETEST;

SET 设置了 MySQL 个变量之一。其中一些是系统变量,一些是用户变量...

设置SQL_MODE:

SQL_MODE是一个系统变量,你可以在文档中看到所有可能的模式。

NO_AUTO_VALUE_ON_ZERO :

NO_AUTO_VALUE_ON_ZERO affects handling of AUTO_INCREMENT columns. Normally, you generate the next sequence number for the column by inserting either NULL or 0 into it. NO_AUTO_VALUE_ON_ZERO suppresses this behavior for 0 so that only NULL generates the next sequence number.

设置time_zone:

SET time_zone = "+00:00"UTC.

上设置会话时区

阅读更多:How do I set the time zone of MySQL?

SET statement is used here:

to assign values to variables that affect the operation of the server or clients

语句和变量都不是特定于数据库创建的。事实上,我不认为它们应该有任何明显的效果:

  • 您不能在每个数据库的基础上配置 AUTO_INCREMENT 处理(仅每个服务器或每个会话)。
  • 数据库没有时区(服务器或当前会话有)。

虽然生成 SQL 转储的工具会设置一些变量来配置会话并为 运行 命令获取可预测的环境,但这很常见。此类变量往往来自模板,未针对脚本内容进行自定义。