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);