常见问题汇总(十二)——关于Mysql

这篇博客汇总了关于MySQL的一系列常见问题及解决方法,包括插入中文乱码、使用sql函数作为表名、忘记root密码、连接错误、时间区问题、主外键关联问题等,并给出了详细的解决步骤和注意事项。
摘要由CSDN通过智能技术生成

1、向数据库插入中文出现乱码

      (1)jdbc:mysql://localhost:3306/world?useUnicode=true&characterEncoding=utf8

    * 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾,但;在xml中必须用&转义

     (2)数据库字符设定为UTF-8

            

     (3)页面字符设定为UTF-8

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

       (4) 前后交互(过滤)字符设定为UTF-8,注意get、post等方式访问实现utf-8 方式不同

 <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

      (5)开发工具中当前项目设定为UTF-8

2、不准使用sql函数或命令作为表名或字段名,如果必须加需要用··包裹起来

3、忘记root密码

linux下获取初始密码: grep 'temporary password' /var/log/mysqld.log

           方法总结

4、Unknown column in field list

        无法从数据库获取相应字段:传入参数属性和数据库字段名不同;数据库没有对应字段

5、使用union返回数据与预期不符合

        union要求,连接双方,返回字段个数一致,名称一致,顺序一致

6、Navicat连接mysql报2059错误 

navicat不支持mysql5.7以上的加密规则,用下面命令改变规则

mysql -uroot -ppassword #登录

use mysql; #选择数据库

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #更改加密方式

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; #更新用户密码

FLUSH PRIVILEGES; #刷新权限

7、Navicat连接mysql时出现:ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL

#操作mysql表
mysql> use mysql
Database changed
#允许来自所有host的连接
mysql> update user set host='%' where user='root';
#出现下列错误忽略
ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
#更新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

8、windows下修改server-id

#查看id
show variables like 'server_id';
#修改
set global server_id=2;

9、修改密码无效

#版本5.7以前修改密码
SET PASSWORD = PASSWORD('Xiaoming250'); 
#版本5.7以后修改密码
ALTER USER USER() IDENTIFIED BY 'Xiaoming250';

10、启动异常

#抓取错误信息
cat /var/log/mysqld.log

11、Native连接出现2059错误

ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则  
  
  
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';  #更新一下用户的密码  
 
 
FLUSH PRIVILEGES; #刷新权限

12、Mysql无法通过telnet联通

#第一步检查端口是否启动
#第二步查看地址是否开通
netstat -napt
#如果其中Local Address是127.0.0.1则只能本地访问
#修改config文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
#修改bind-address=0.0.0.0

13、The server time zone value ‘xxx’ is unrecognized or represents more than one time zone

  MySql6.0以后,关于mysql配置有两点需要注意

 14、主外键关联而无法删除数据

第一步:让主键失效:alter table table_name disable primary key cascade;

第二步:删除数据:delete table_name;
第三步:让主键生效:alter table table_name enable primary key;

15、设置创建时间和更新时间

 `create_time`  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `update_time`  TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',

16、数据库时区指定CST导致读写时间不一致

原因是CST时区可能表示下列时间:

1.美国中部时间 Central Standard Time (USA) UTC-06:00

2.澳大利亚中部时间 Central Standard Time (Australia) UTC+09:30

3.中国标准时 China Standard Time UTC+08:00

4.古巴标准时 Cuba Standard Time UTC-04:00

解决方案:

JDBC连接参数指明时区:如serverTimezone=Asia/Shanghai

17、attempted to return null from a method with a primitive return type (int)

原因:数据库字段值为空,但是方法返回值为基础类型

18、Lock wait timeout exceeded; try restarting transaction

原因:数据库死锁或等待超时

解决方案:

1、临时方案:

        select * from information_schema.innodb_trx;
               kill  thread_id

2、终极方案:

        分析sql,是否存在资源处理超时或者相互争抢的情况

19、You can't specify target table for update in FROM c 

原因:查询和修改操作不能同时针对一张表

方案:采用子查询做临时表

        如:update A set.a=a where A.id in (select M.id from (select * from A) M);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值