mysql中文乱码及自动断开连接的问题

中文乱码

1、修改数据库字符,如下图:
!QQ%E6%88%AA%E5%9B%BE20180706180532.png!
切记,字符改之前已创建的表也须手动修改,或者删除此表重新创建

2、导入数据库(mysql5.5)的数据为乱码的问题,修改my.ini文件中的内容即可解决,如下:

修改前:
[mysql]
default-character-set=latin1
[mysqld]
character-set-server=latin1

修改后:
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8

修改完成后运行以下语句,查看是否更正:

SHOW VARIABLES LIKE '%char%';

!mysql%E7%BC%96%E7%A0%81.png!

自动断开问题

有三个方法可以解决这个问题:

1:修改MySQL配置参数(推荐)

2:修改JDBC(mysql5以上的,设置autoReconnect=true 是无效的 只有4.x版本,起作用)

3:修改第三方的数据库连接池应用 Proxool.xml(根据项目环境而定)

方法1的解决方案:

这个参数的名称是 wait_timeout,其默认值为 28800秒(8小时)。其意义为关闭一个连接之前在这个连接上等到行动的秒数,也就是说,如果一个连接闲置超过这个选项所设置的秒数,MySQL会主动断开这个连接。

修改操作:

Linux下打开/etc/my.cnf,在属性组mysqld下面添加参数如下:

[mysqld]
interactive_timeout=28800000
wait_timeout=28800000
windows下打开my.ini,增加:
interactive_timeout=28800000
wait_timeout=28800000

有实践表明,没有办法把这个值设置成无限大,即永久。因此如果你无法保证你的应用程序必定在设定的秒数内至少有一次操作,那么最好用第二个方法解决这个问题。

方法二的解决方案:

修改如下JDBC连接的 URL:

jdbc:mysql://hostaddress:3306/schemaname?autoReconnect=true

添加 autoReconnect=true这个参数,即能解决这个问题。

注意:mysql5以上的,设置autoReconnect=true 是无效的 只有4.x版本,起作用

方法三的解决方案:

配置文件(proxool.xml):

<something-else-entirely>

<proxool>

<!-- proxool别名 -->

<alias>mysql</alias>

<!--数据库连接URL -->

<driver-url>

jdbc:mysql://localhost/yourDatebase?useUnicode=true&characterEncoding=UTF-8</driver-url>

<!-- JDBC驱动名称 -->

<driver-class>com.mysql.jdbc.Driver</driver-class>

<!--数据库连接帐号 -->

<driver-properties>

<property name="user"value="root" />

<property name="password"value="password" />

</driver-properties>

<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 -->

<house-keeping-sleep-time>90000</house-keeping-sleep-time>

<!--指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受 -->

<maximum-new-connections>20</maximum-new-connections>

<!--最少保持的空闲连接数 -->

<prototype-count>3</prototype-count>

<!--允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 -->

<maximum-connection-count>20</maximum-connection-count>

<!--最小连接数 -->

<minimum-connection-count>3</minimum-connection-count>

<!--在分配连接前后是否进行有效性测试,这个是解决本问题的关键 -->

<test-before-use>true</test-before-use>

<test-after-use>true</test-after-use>

<!--用于测试的SQL语句一定要写(不知道问什么)-->

<house-keeping-test-sql>SELECTCURRENT_USER</house-keeping-test-sql>

</proxool>

</something-else-entirely>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值