[ERROR] unknown variable 'sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE

之前安装mysql之后使用发现诸多问题,一次是不能使用group by一次是datetime不能添加空字段,结果发现这几次问题都和这个sql_mdoe的设置有关,可是每次按照网上提示在my.ini添加了sql_mode之后重启服务,可是登录mysql都会报这个错误

[ERROR] unknown variable 'sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

 

网上改的都挺好的,可是我就起不来,直到我不经意之间看到了一个问题

网上改好的样板里面有一个是这个值修改在[mysqld]下面而且用<strong>括起来的时候,我突然发现,我这个sql_mode值设定在[client]下面

 

这是我之前的配置

[mysqld]
port = 3306
basedir=C:\Program Files\mysql-8.0.12-winx64
datadir=C:\Program Files\mysql-8.0.12-winx64\data
[mysql]
# mysql默认编码
default-character-set = utf8mb4

[client]
# mysql客户端默认编码
default-character-set = utf8mb4
sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

 

 

这是我之后的配置

[mysqld]
port = 3306
basedir=C:\Program Files\mysql-8.0.12-winx64
datadir=C:\Program Files\mysql-8.0.12-winx64\data
sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mysql]
# mysql默认编码
default-character-set = utf8mb4

[client]
# mysql客户端默认编码
default-character-set = utf8mb4

 

修改之后系统正常启动,且查询select @@sql_mode之后值显示正常

这个坑不得不说也是挺烦人的

### 回答1: 设置@@sql_mode = 'strict_trans_tables,error_for_division_by_zero,no_auto_create_user'语句用于设置MySQL数据库的全局sql_mode参数。 - strict_trans_tables:严格事务表。此模式将强制MySQL在执行事务操作时检查表的约束,如唯一键、外键等。如果违反约束条件,将会拒绝对表进行修改操作,并抛出相应的错误。 - error_for_division_by_zero:除零错误。此模式将导致MySQL在除法操作发生被零除的情况下抛出错误。通常,除以零的结果会被规定为无穷大或NaN,但启用此模式后,除零错误将导致查询中断并抛出错误。 - no_auto_create_user:禁止自动创建用户。此模式将禁止MySQL在使用GRANT语句授权用户时自动创建新用户。如果GRANT语句中指定的用户不存在,则会抛出错误,并要求使用者手动创建用户。 总结来说,设置@@sql_mode = 'strict_trans_tables,error_for_division_by_zero,no_auto_create_user'可以使MySQL数据库以严格的事务表约束检查、抛出除零错误和禁止自动创建用户的模式运行。这些设置能够帮助提高数据库的数据完整性和安全性,并减少错误和意外的发生。 ### 回答2: set @@sql_mode = 'strict_trans_tables,error_for_division_by_zero,no_auto_create_user' 以上代码是用于设置MySQL数据库的sql_mode参数的。sql_modeMySQL的一个系统变量,用于控制数据库的一些行为和规则。在这个代码中,我们设置了三个参数: 1. strict_trans_tables:严格事务表模式。当启用这个模式时,MySQL会在事务中执行的每个SQL语句上都进行严格的类型检查,确保数据的完整性和一致性。如果出现类型不匹配或其他错误,将导致事务回滚。 2. error_for_division_by_zero:除零错误模式。启用这个模式后,当执行除零运算时,MySQL会抛出一个错误,而不是返回一个无穷大或NULL值。这有助于及时发现并解决错误操作。 3. no_auto_create_user:禁止自动创建用户模式。在MySQL中,默认情况下,当通过GRANT语句授予某个用户权限时,如果该用户不存在,则会自动创建该用户。启用这个模式后,MySQL将不会自动创建用户,需要手动创建用户后才能授予权限。 通过设置这些参数,我们可以增强数据库的安全性和可靠性,避免一些常见的错误和潜在的安全隐患。当然,具体使用时需要根据实际情况和需求来设置合适的sql_mode。 ### 回答3: 首先,这个命令是用来设置MySQL数据库的sql_mode参数的。sql_mode参数用于控制数据库在执行SQL语句时的行为。具体来说,设置了这个参数后,数据库在执行操作时会按照设置的模式进行处理。 其中,strict_trans_tables表示在使用事务表时要求严格遵守ACID事务特性,如果在事务中违反了这些特性,数据库会抛出错误并回滚事务。严格遵守ACID可以保证数据的一致性和完整性。 error_for_division_by_zero表示当除以零的操作发生时,数据库会抛出一个错误。这是为了避免在计算中发生分母为零的情况,从而保证计算的准确性。 no_auto_cre表示禁止使用自动创建表的功能。通常情况下,MySQL数据库可以根据INSERT语句自动创建表,但设置了no_auto_cre后,数据库会禁止这一功能。这样可以避免意外创建表或破坏现有数据结构。 综上所述,设置 @@sql_mode = 'strict_trans_tables,error_for_division_by_zero,no_auto_cre' 的作用是确保数据库在执行操作时严格遵守事务特性、避免除零错误,并禁止自动创建表的功能。这样可以提高数据库的安全性和稳定性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值