MySQL Error:修订间差异

来自牛奶河Wiki
跳到导航 跳到搜索
无编辑摘要
 
(未显示同一用户的4个中间版本)
第2行: 第2行:


==== 使用关键字做字段名 ====
==== 使用关键字做字段名 ====
如下面SQL中的 condition, 这样会报错,需要加上 "`"
如下面 SQL 中的 condition, 这样会报错,需要加上 "`"


或者可以将所有字段都加上,如:
或者可以将所有字段都加上,如:


select id, area,`condition`, condition_code
select   id, area,`condition`, condition_code
from    ods.t1


from ods.t1
==== ERROR 1418 ====
 
==== ERROR 1418 (HY000) ====
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)


开启bin-log, 函数中需要指定操作:
开启 bin-log, 函数中需要指定操作:
 
* DETERMINISTIC  确定的
* DETERMINISTIC  确定的
* NO SQL         没有SQl语句
* NO SQL         没有SQl语句
* READS SQL DATA 只是读取数据
* READS SQL DATA 只是读取数据
(以上支持)
(以上支持)


第25行: 第22行:


==== 1261 - Row XX doesn’t contain data for all colums ====
==== 1261 - Row XX doesn’t contain data for all colums ====
mysql报1261或1262错误主要是由于mysql中的sql_mode严格设置。需要将mysql_mode修改。
MySQL 报 1261 或 1262 错误主要是由于 sql_mode 严格设置。
 
* select @@sql_mode 查看目前mode类型
首先select @@sql_mode查看目前mode类型;select @@global.sql_mode是查看全局设置。
* select @@global.sql_mode 查看全局设置


搜索sql_mode,将strict_trans_tables删除,或者设置为空
搜索 sql_mode,将 strict_trans_tables 删除,或者设置为空


sql-mode=“NO_UNSIGNED_SUBTRACTION,NO_ENGINE_SUBSTITUTION”
sql-mode=“NO_UNSIGNED_SUBTRACTION,NO_ENGINE_SUBSTITUTION”


重启mysql服务, mysql net stop; mysql net restart;
重启 MySQL 服务 mysql net stop; mysql net start;


==== 2013, Lost connection to MySQL server during query ====
==== 2013, Lost connection to MySQL server during query ====
net_read_timeout 和 net_write_timeout :控制一次连接传输数据等待的时间,默认是 30s.
net_read_timeout 和 net_write_timeout:控制一次连接传输数据等待的时间,默认是 30s.
 
max_allowed_packet : 数据传输中使用了较大的 string filed 或者 blob filed,导致超过了max_allowed_packet


wait_timeout :The number of seconds the server waits for activity on a noninteractive connection before closing it. 如果MySQL 配置的比应用低,就会出现应用程序中认为一个连接还没有到回收的时间,但是 MySQL 自己判断需要强制回收了。
* max_allowed_packet: 数据传输中使用了较大的 string filed 或者 blob filed,导致超过了max_allowed_packet
* wait_timeout :The number of seconds the server waits for activity on a noninteractive connection before closing it. 如果 MySQL 配置的比应用低,就会出现应用程序中认为一个连接还没有到回收的时间,但是 MySQL 自己判断需要强制回收了


==== ERROR 1819 (HY000) ====
==== ERROR 1819 ====
Your password does not satisfy the current policy requirements
Your password does not satisfy the current policy requirements
* 0 or LOW     只验证长度
* 0 or LOW     只验证长度
* 1 or MEDIUM  验证长度、数字、大小写、特殊字符
* 1 or MEDIUM  验证长度、数字、大小写、特殊字符
* 2 or STRONG  验证长度、数字、大小写、特殊字符、字典文件
* 2 or STRONG  验证长度、数字、大小写、特殊字符、字典文件


SHOW VARIABLES LIKE 'validate_password%';
SHOW VARIABLES LIKE 'validate_password%';
 
{| class="wikitable"
+--------------------------------------+--------+
|Variable_name
 
|Value
| Variable_name                        | Value  |
|-
 
|validate_password.check_user_name
+--------------------------------------+--------+
|ON
 
|-
| validate_password.check_user_name    | ON     |
|validate_password.dictionary_file
 
|
| validate_password.dictionary_file   |        |
|-
 
|validate_password.length
| validate_password.length             | 8      |
|8
 
|-
| validate_password.mixed_case_count   | 1      |
|validate_password.mixed_case_count
 
|1
| validate_password.number_count       | 1      |
|-
 
|validate_password.number_count
| validate_password.policy             | MEDIUM |
|1
 
|-
| validate_password.special_char_count | 1     |
|validate_password.policy
 
|MEDIUM
+--------------------------------------+--------+
|-
|validate_password.special_char_count
|1
|}


set global validate_password.policy=0;
set global validate_password.policy=0;
{| class="wikitable"
|Variable_name
|Value
|-
|validate_password.check_user_name
|ON
|-
|validate_password.dictionary_file
|
|-
|validate_password.length
|8
|-
|validate_password.mixed_case_count
|1
|-
|validate_password.number_count
|1
|-
|validate_password.policy
|LOW
|-
|validate_password.special_char_count
|1
|}


+--------------------------------------+-------+
==== Cannot convert string from utf8mb4 to binary ====
[https://bugs.mysql.com/bug.php?id=110955#:~:text=Description%3A%20Union%20all%20derived%20table%20query%20error%3A%20Warning,others%20This%20problem%20does%20not%20exist%20in%208.0.31. 官方已确认是 8.0.32 中的一个bug,已在 8.0.33 版本中修复。]


| Variable_name                        | Value |
对于 8.0.32 版本
 
show variables LIKE '%optimizer_switch%';
+--------------------------------------+-------+
set global optimizer_switch="...,derived_condition_pushdown=off";
 
| validate_password.check_user_name    | ON    |
 
| validate_password.dictionary_file   |       |
 
| validate_password.length             | 8     |
 
| validate_password.mixed_case_count   | 1     |
 
| validate_password.number_count       | 1     |
 
| validate_password.policy             | LOW   |
 
| validate_password.special_char_count | 1    |


+--------------------------------------+-------+
该参数于 8.0.22 版本中引入,默认值为 on,表示外查询块中与派生表相关的条件会推入到派生表中。


==== Cannot convert string from utf8mb4 to binary ====
相关:优化器处理派生表(derived table)有两种策略:
[https://bugs.mysql.com/bug.php?id=110955#:~:text=Description%3A%20Union%20all%20derived%20table%20query%20error%3A%20Warning,others%20This%20problem%20does%20not%20exist%20in%208.0.31. 官方已确认是8.0.32中的一个bug,已在8.0.33版本中修复。]
# 将派生表合并到外查询块中
# 将派生表物化为一个临时表
使用优化器开关 derived_merge 来控制优化器选择哪种策略。设置为 on,选择策略 1;设置为 off,选择策略 2。此开关从 5.7.6 版本时引入,默认值为 on。


对于 8.0.32 及以下版本
'''当优化器无法合并时,条件下推到派生表(derived_condition_pushdown=on)可以减少物化数据的行数,加速查询的执行。'''
show variables LIKE '%optimizer_switch%';
set global optimizer_switch="...,derived_condition_pushdown=off";





2023年12月7日 (四) 14:01的最新版本

MySQL Error

使用关键字做字段名

如下面 SQL 中的 condition, 这样会报错,需要加上 "`"

或者可以将所有字段都加上,如:

select   id, area,`condition`, condition_code
from     ods.t1

ERROR 1418

This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

开启 bin-log, 函数中需要指定操作:

  • DETERMINISTIC  确定的
  • NO SQL         没有SQl语句
  • READS SQL DATA 只是读取数据

(以上支持)

  • MODIFIES SQL DATA 要修改数据
  • CONTAINS SQL 包含了SQL语句

1261 - Row XX doesn’t contain data for all colums

MySQL 报 1261 或 1262 错误主要是由于 sql_mode 严格设置。

  • select @@sql_mode 查看目前mode类型
  • select @@global.sql_mode 查看全局设置

搜索 sql_mode,将 strict_trans_tables 删除,或者设置为空

sql-mode=“NO_UNSIGNED_SUBTRACTION,NO_ENGINE_SUBSTITUTION”

重启 MySQL 服务 mysql net stop; mysql net start;

2013, Lost connection to MySQL server during query

net_read_timeout 和 net_write_timeout:控制一次连接传输数据等待的时间,默认是 30s.

  • max_allowed_packet: 数据传输中使用了较大的 string filed 或者 blob filed,导致超过了max_allowed_packet
  • wait_timeout :The number of seconds the server waits for activity on a noninteractive connection before closing it. 如果 MySQL 配置的比应用低,就会出现应用程序中认为一个连接还没有到回收的时间,但是 MySQL 自己判断需要强制回收了

ERROR 1819

Your password does not satisfy the current policy requirements

  • 0 or LOW     只验证长度
  • 1 or MEDIUM  验证长度、数字、大小写、特殊字符
  • 2 or STRONG  验证长度、数字、大小写、特殊字符、字典文件

SHOW VARIABLES LIKE 'validate_password%';

Variable_name Value
validate_password.check_user_name ON
validate_password.dictionary_file
validate_password.length 8
validate_password.mixed_case_count 1
validate_password.number_count 1
validate_password.policy MEDIUM
validate_password.special_char_count 1

set global validate_password.policy=0;

Variable_name Value
validate_password.check_user_name ON
validate_password.dictionary_file
validate_password.length 8
validate_password.mixed_case_count 1
validate_password.number_count 1
validate_password.policy LOW
validate_password.special_char_count 1

Cannot convert string from utf8mb4 to binary

官方已确认是 8.0.32 中的一个bug,已在 8.0.33 版本中修复。

对于 8.0.32 版本

show variables LIKE '%optimizer_switch%';
set global optimizer_switch="...,derived_condition_pushdown=off";

该参数于 8.0.22 版本中引入,默认值为 on,表示外查询块中与派生表相关的条件会推入到派生表中。

相关:优化器处理派生表(derived table)有两种策略:

  1. 将派生表合并到外查询块中
  2. 将派生表物化为一个临时表

使用优化器开关 derived_merge 来控制优化器选择哪种策略。设置为 on,选择策略 1;设置为 off,选择策略 2。此开关从 5.7.6 版本时引入,默认值为 on。

当优化器无法合并时,条件下推到派生表(derived_condition_pushdown=on)可以减少物化数据的行数,加速查询的执行。