Top 7:
有同学经常会问张老师 , 为什么我的数据库总会出现中文乱码的情况 。一堆????不知道怎么回事 。当向数据库中写入创建表,并插入中文时,会出现这种问题 。此报错会涉及数据库字符集的问题 。
解决思路:
对于中文乱码的情况,记住老师告诉你的三个统一就可以 。还要知道在目前的mysql数据库中字符集编码都是默认的UTF8
处理办法:
1、数据终端,也就是我们连接数据库的工具设置为 utf8
2、操作系统层面;可以通过 cat /etc/sysconfig/i18n 查看;也要设置为 utf8
3、数据库层面;在参数文件中的 mysqld 下,加入 character-set-server=utf8 。
Emoji 表情符号录入 mysql 数据库中报错 。
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...' for column 'CONTENT' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
解决思路:针对表情插入的问题,一定还是字符集的问题 。
处理方法:我们可以直接在参数文件中,加入
vim /etc/my.cnf
[mysqld]
init-connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
注:utf8mb4 是 utf8 的超集 。
Top 8:使用 binlog_format=statement 这种格式,跨库操作,导致从库丢失数据,用户访问导致出现错误数据信息 。
当前数据库二进制日志的格式为:binlog_format=statement
在主库设置binlog-do-db=mydb1(只同步mydb1这一个库)
在主库执行use mydb2;
insert into mydb1.t1 values ('bb');这条语句不会同步到从库 。
但是这样操作就可以;
use mydb1;
insert into mydb1.t1 values ('bb');因为这是在同一个库中完成的操作 。
在生产环境中建议使用binlog的格式为row,而且慎用binlog-do-db参数 。
Top 9:MySQL 数据库连接超时的报错 ;
org.hibernate.util.JDBCExceptionReporter - SQL Error:0, SQLState: 08S01
org.hibernate.util.JDBCExceptionReporter - The last packet successfully received from the server was43200 milliseconds ago.The last packet sent successfully to the server was 43200 milliseconds ago, which is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection 'autoReconnect=true' to avoid this problem.
org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.JDBCConnectionException: Could not execute JDBC batch update
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Connection.close() has already been called. Invalid operation in this state.
org.hibernate.util.JDBCExceptionReporter - SQL Error:0, SQLState: 08003
org.hibernate.util.JDBCExceptionReporter - No operations allowed after connection closed. Connection was implicitly closed due to underlying exception/error:
** BEGIN NESTED EXCEPTION **
大多数做 DBA 的同学,可能都会被开发人员告知,你们的数据库报了这个错误了 。赶紧看看是哪里的问题 。
这个问题是由两个参数影响的,wait_timeout 和 interactive_timeout 。数据默认的配置时间是28800(8小时)意味着,超过这个时间之后,MySQL 数据库为了节省资源,就会在数据库端断开这个连接,Mysql服务器端将其断开了,但是我们的程序再次使用这个连接时没有做任何判断 , 所以就挂了 。
推荐阅读
- 飞行模拟游戏神作,飞行模拟单机游戏
- flutter与flatter的简单介绍
- 新媒体部门如何设置,新媒体部门如何设置管理员
- go语言相对路径的跟目 golang 相对路径
- 表格在线转化为html代码,表格在线转化为html代码
- 华为p30赛车游戏下载,华为 赛车游戏
- 无法安装sqlserver,无法安装sqlserver此目录是压缩目录
- java选择性排序代码 java选择性排序代码怎么写
- java塔罗牌代码,judtice塔罗牌