一、记录一次准备给客户预演示出现的问题
事故的背景:
当所以功能开发完成后,开发人员在本地进行了测视已经没问题了。就把所有开发的功能模块合并到
dev
分支,进行打包,发布到预演示的线上环境。当在给相关人员进行演示的时候,出现了问题。我们使用
https
调用对方的接口发送Json
数据,对方进行校验马上返回校验的响应结果。问题出现在我们每次发送数据都是成功的,但是对方发送回来的数据,一直不能正常插入DB(使用的是 Oracle)
。事故的真正原因:
因为有个同事在进行了
delete
后没有进行commit
提交。导致表一直被锁住,不能被其他人使用。但是杀死进程和本地
commit
几次后,依旧无法插入数据,提示还是DB
被这个同事锁住。最后查出的真正原因是,这个同事首先使用了
无线网络
进行了DB
的操作,当时并没有commit
提交操作。而后又插上网线继续工作,问题就出现在这里。首先,当我们使用无线网络操作
DB
时,Oracle
会默认这是一次会话(session)
, 当开发人员对DB
进行操作后(没有commit
),又切换到了有线网络状态下,而这 2 种状态下的本机IP
是不一样的(有兴趣的朋友可以试试使用无线和有线连接状态下,同一台电脑的IP
地址是否一样)。
Oracle
会认为第一次session
没有关闭,会将表锁住,等待这次session
会话的提交直到结束。所以当同事再连接上网线,使用有线网络进行
commit
时候会提示操作失败。因为Oracle
数据库认为这又是一次新的session
会话。而第一次的session
会话并没有结束,就会导致出现了DB
一直被锁的情况。事故的解决办法:
首先使用语句查询
(只有 Admin 用户才可以)
出被锁住的表和锁表的开发人员的工号。然后杀死这个进程或者进行
DB
重启即可。
二、在做 javaweb 项目的时,前台传递的中文最后插入数据库的时候总是出现乱码现象。
解决方案
A、不管是使用 Idea、eclipse,确定自己的项目所使用的字符集是 UTF-8
。
B、查看 MySQL
的字符集是否是 UTF-8
。打开 Dos
窗口,输入:mysql -u root -p
, 在输入密码即可进入 数据库。进入数据库输入命令:show variables like 'character%';
查看数据库的字符集,如下图:
MySQL
的默认编码是 Latin1
,不支持中文,要支持中文需要把数据库的默认编码修改为 UTF-8
。
C、修改 MySQL 的字符集。
① 使用命令修改数据库的字符集为 UTF-8
。(由于小编使用命令设置后依旧不能插入,不在此赘述)
② 修改 MySQL
的配置文件。(修改后,成功插入中文,在此介绍这种方法)
D、本人安装的 MySQL
版本是 5.7.25,安装好 MySQL
后就要对字符集进行修改了,网上的大部分说法是去 安装目录找一个 my-default.ini
文件,然后重命名为 my.ini
,再对其进修改字符集即可,但是 在 MySQL
的安装目录下居然没有这个文件。
其实 MySQL
的 5.7.25 的 my.ini
文件不在安装目录下,如果是默认安装 MySQL
的,那么它的 my.ini
文 件在隐藏文件夹 C:\ProgramData\MySQL\MySQL Server 5.7
下。
你需要做的就是显示隐藏的的项目,找到这个文件修改即可(修改前,请先做备份)。
对该 my.ini
文件下进行配置修改:
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8
collation-server = utf8_unicode_ci
init_connect=’SET NAMES utf8’
E、修改 my.ini
文件后,保存,再重启 MySQL
服务。
计算机——右键——管理——服务,找到 MySQL57
,对其右键停止,再启动即可
F、重启成功后,进入 MySQL
数据库,输入show variables like 'character%';
显示数据库字符集已修改 成功。
重要提示:
对于中文乱码问题,小编只是列举了一种可能性,以及解决方案。当然最重要的是肯定还有很多原因导致中文乱码,都会有相应的解决方案。作为程序猿,应当懂得 google,正所谓自己动手,丰衣足食。