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

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

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

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

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

            常见问题汇总(十二)——关于Mysql_第1张图片

     (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"%>



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

 
    characterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    
    
      forceEncoding
      true
    
  
  
    characterEncodingFilter
    /*
  

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

常见问题汇总(十二)——关于Mysql_第2张图片

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,是否存在资源处理超时或者相互争抢的情况

你可能感兴趣的:(常见开发问题)