• MySQL常见问题汇总


    文档地址

    You must reset your password using ALTER USER statement before executing this statement.

    解决方法:

    alter user user() identified by '26SE>Z%UddNN';
    
    • 1

    Unknown collation: ‘utf8mb4_0900_ai_ci’

    错误原因:高版本数据库(8.0)转存sql文件,并导入低版本数据库(5.7)

    方案一:升级MySQL数据库至高版本

    方案二:将需要导入的sql文件,把其中的utf8mb4_0900_ai_ci全部替换为utf8_general_ciutf8mb4替换为utf8

    this is incompatible with sql_mode=only_full_group_by

    Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘×××’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

    错误原因:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。

    解决方案:

    1. 打开my.cnf配置文件

      vi /etc/my.cnf
      
      • 1
    2. 修改模式

      [mysqld]下面添加:

      sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
      
      • 1
    3. 重启服务

      systemctl restart mysqld
      
      • 1

    com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (10,892 > 1,024).

    错误原因:MySQL的max_allowed_packet设置过小,MySQL根据配置文件会限制server接受的数据包大小。

    有时候大的插入和更新会被max_allowed_packet参数限制掉,导致失败。

    解决方案:

    1. 进入MySQL

      mysql -uroot -p
      
      • 1
    2. 查看当前配置信息

      show VARIABLES like '%max_allowed_packet%';
      
      • 1

      max_allowed_packet

    3. 设置max_allowed_packet

      set global max_allowed_packet = 2*1024*1024*10;
      
      • 1

      max_allowed_packet

    4. 重启服务

      systemctl restart mysqld
      
      • 1

    Public Key Retrieval is not allowed

    错误原因:如果用户使用了sha256_password认证,密码在传输过程中必须使用TLS协议保护,但是如果RSA公钥不可用,可以使用服务器提供的公钥;可以在连接中通过ServerRSAPublicKeyFile指定服务器的RSA公钥,或者AllowPublicKeyRetrieval=True参数以允许客户端从服务器获取公钥;但是需要注意的是AllowPublicKeyRetrieval=True可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码,所以默认是关闭的,必须显式开启

    解决方案:

    allowPublicKeyRetrieval=true
    
    
    jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&characterEncoding=UTF8&allowPublicKeyRetrieval=true
    
    • 1
    • 2
    • 3
    • 4

    查询存储的时间和存储的时间相差13个小时

    1. 明确指定MySQL数据库的时区,不使用引发误解的CST

      mysql> set global time_zone = '+08:00';
      Query OK, 0 rows affected (0.00 sec)
       
      mysql> set time_zone = '+08:00';
      Query OK, 0 rows affected (0.00 sec)
      
      • 1
      • 2
      • 3
      • 4
      • 5
    2. 修改数据库配置文件

      vi /etc/my.cnf
      
      # 添加一行
      default-time-zone='+08:00'
      
      • 1
      • 2
      • 3
      • 4

    Parameter index out of range (1 > number of parameters, which is 0)

    当分页查询中带有SQL子查询LEFT JOIN时,参数"#{}"无法被解析

    Issue

    错误原因:SQL语句可能无法优化

    • 当将#{}换成${}不会报错,但会引发SQL注入问题,该方案不可取

    • 不分页时,无此问题

    • RIGHT JOININNER JOIN不会触发此问题

    解决方案:通过Page对象设置关闭优化可以解决此问题

  • 相关阅读:
    Java:谁是Java开发人员?这个职业现在很抢手吗?
    SAP Hybris Category 显示在 Storefront 的判定条件
    (八)Linux搭载4G模块——PDU短信格式的获取与解码
    3 Minute Thesis (3MT)
    【情态动词练习题】Can / Could you
    RabbitMQ高级特性 - 消息和队列TTL、死信队列
    es--elasticsearch--篇四:完成各个功能的接口,实现完整的文本搜索案例
    美国能源部国家实验室将量子计算用于关键能源研究
    Java架构师之路七、大数据:Hadoop、Spark、Hive、HBase、Kafka等
    c#优雅高效的读取字节数组——不安全代码(1)
  • 原文地址:https://blog.csdn.net/m0_67401417/article/details/126478458