问题集

问题1 设置MYSQL的字符集为GBK

1、 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,
如 default-character-set = utf8
character_set_server = utf8
修改完后,重启mysql的服务,service mysql restart
使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8
+--------------------------+---------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | D:"mysql-5.0.37"share"charsets" |
+--------------------------+---------------------------------+

2、还有一种修改字符集的方法,就是使用mysql的命令
mysql> SET character_set_client = utf8 ;
mysql> SET character_set_connection = utf8 ;
mysql> SET character_set_database = utf8 ;
mysql> SET character_set_results = utf8 ;
mysql> SET character_set_server = utf8 ;

mysql> SET collation_connection = utf8 ;
mysql> SET collation_database = utf8 ;
mysql> SET collation_server = utf8 ;


3、一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:

SET NAMES 'utf8';

它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;


**补充:***
先把数据导出,把数据库转换完毕后再把数据导回数据库
***********
--
以上

=================================================================================================================

问题2 关于安装MYSQL

1. 首先下载Noinstall Zip Archive版本的MYSQL(mysql-5.5.8-win32.zip)
2. 解压到你喜欢的目录(假设为:c:\mysql5.5)
3. 打开c:\mysql5.5,可以看到很多ini后缀的文本文件,这是MySQL配置文件范例
如果只是作为开发机,先将my-small.ini重命名为my.ini,然后用文本编辑器打开my.ini,在[mysqld]之后添加如下内容:

basedir="c:/mysql5.5"

datadir="c:/mysql5.5/data"

保存修改

4. 在命令行输入:c:\mysql5.5\bin\mysqld --console

回车后应该看到下面表示启动成功:

mysqld:ready for connections

Version:'5.5.9'  socket: ''  port: 3306

按下键盘ctrl + c 强行中断命令

 

5. 为了方便,可在环境变量中将c:\mysql5.5\bin添加到PATH

 

接下来将MySQL设置为Windows服务

 

6. 如果MySQL正在运行,设置为Windows服务之前要先将MySQL停止,命令行输入:

c:\mysql5.5\bin\mysqladmin -u root shutdown

然后输入:

c:\mysql5.5\bin\mysqld--install MySQL --defaults-file=c:\mysql5.5\my.ini

设置成功后再启动MySQL服务:

net start mysql

启动后:

c:\mysql5.5\bin\mysql-u root -p

回车后会要求输入密码,这里密码为空,所以直接回车

回车后,如果命令行显示"mysql>",表示登录成功

输入下列命令修改root密码:

SETPASSWORD FOR 'root'@'localhost' = PASSWORD('新密码');

SETPASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('新密码');

SETPASSWORD FOR 'root'@'::1' = PASSWORD('新密码');

SETPASSWORD FOR 'root'@'%' = PASSWORD('新密码');

 

至此,安装完成!

后记:

 

Mysql默认的字符集是Latin1,一般我们都会改为GBK或者UTF8

更改方法很简单,修改my.ini就可以了

(上面提到的直接CMD中SET character_set_client 没有效果 如果重启mysql服务就会被重置

通过修改my.ini确实可以实现默认字符集的修改 但一个注意的地方是确定 share\charsets 包含GBK的文件)

[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8

 

登陆Mysql后,输入show variables like 'char%';

显示下面内容即修改成功

+--------------------------+-------------------------------------------------+
|Variable_name           |Value                                          |
+--------------------------+-------------------------------------------------+
| character_set_client     |utf8                                           |
| character_set_connection |utf8                                           |
| character_set_database   |utf8                                           |
| character_set_filesystem |binary                                         |
| character_set_results    |utf8                                           |
| character_set_server     |utf8                                           |
| character_set_system     |utf8                                           |
| character_sets_dir       |c:\mysql5.5\share\charsets\         |
+--------------------------+-------------------------------------------------+

=================================================================================================================

问题3 MYSQL表诡异的消失

用CMD进入MYSQL服务,创建表、插入数据、查询有数据,也确实看到mysql-5.5.14-winx64\data\hibernate\news_table.frm文件了

OK,运行代码,表居然给我不见了 

各种排除错误 最后仔细检查hibernate配置文件 发现这么一句:

<property name="hbm2ddl.auto">create</property>

作用是根据需要自动创建数据库

把create去掉后问题解决

==================================================================================================================

问题4 蛋疼的emulator: ERROR: the user data image is used by another emulator. aborting问题

关于这个问题,找了好久得解决方案:(下面直接引用国外网友的回答)

方案1

I have not found a way of avoiding getting this issue, but you can do this to solve quickly:

Remove:
C:/Users/%user_name%/.android/avd/%name_of_avd%/cache.img.lock
C:/Users/%user_name%/.android/avd/%name_of_avd%/userdata-qemu.img.lock

You won't need to restart the emulator.

方案2

I ran into this same problem, and also couldn't find any answers online.
I fixed it by deleting all files in the emulator, except for the minimal needed.

ie: navigate to:
/*user directory*/.android/avd/*device*/
then deleting everything except:
config.ini
scard.img
userdata.img

That fixed the problem for me.

方案3

Run configurations > Target > Wipe user data > Run

It fixed the problem in my case.

方案4

adb kill-server && adb start-server

This console command fixed it for me.

其中,方案2解决了我的问题

==========================================================================================================================

问题5:java.net.SocketException四大异常解决方案

java.net.SocketException如何才能更好的使用呢?这个就需要我们先要了解有关这个语言的相关问题。希望大家有所帮助。那么我们就来看看有关java.net.SocketException的相关知识。

第1个异常是 java.net.BindException:Address already in use: JVM_Bind。

该异常发生在服务器端进行new ServerSocket(port)(port是一个0,65536的整型值)操作时。异常的原因是以为与port一样的一个端口已经被启动,并进行监听。此时用netstat –an命令,可以看到一个Listending状态的端口。只需要找一个没有被占用的端口就能解决这个问题。

第2个异常是java.net.SocketException: Connection refused: connect。

该异常发生在客户端进行 new Socket(ip, port)操作时,该异常发生的原因是或者具有ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由),或者是该ip存在,但找不到指定的端口进行监听。出现该问题,首先检查客户端的ip和port是否写错了,如果正确则从客户端ping一下服务器看是否能ping通,如果能ping通(服务服务器端把ping禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动,这个肯定能解决这个问题。

第3个异常是java.net.SocketException: Socket is closed,

该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作。

第4个异常是java.net.SocketException: (Connection reset或者Connect reset by peer:Socket write error)。

该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。

第5个异常是java.net.SocketException: Broken pipe。

该异常在客户端和服务器均有可能发生。在第4个异常的第一种情况中(也就是抛出 SocketExcepton:Connect reset by peer:Socket write error后),如果再继续写数据则抛出该异常。前两个异常的解决方法是首先确保程序退出前关闭所有的网络连接,其次是要检测对方的关闭连接操作,发现对方关闭连接后自己也要关闭该连接。

编写网络程序时需要注意的问题

第1个问题是要正确区分长、短连接。所谓的长连接是一经建立就永久保持。短连接就是在以下场景下,准备数据—>建立连接— >发送数据—>关闭连接。很多的程序员写了多年的网络程序,居然不知道什么是长连接,什么是短连接。

第2个问题是对长连接的维护。所谓的维护包括两个方面,首先是检测对方的主动断连(既调用 Socket的close方法),其次是检测对方的宕机、异常退出及网络不通。这是一个健壮的通信程序必须具备的。检测对方的主动断连很简单,主要一方主动断连,另一方如果在进行读操作,则此时的返回值只-1,一旦检测到对方断连,则应该主动关闭己方的连接(调用Socket的close方法)。

而检测对方的宕机、异常退出及网络不通常用方法是用“心跳”,也就是双方周期性的发送数据给对方,同时也从对方接收“心跳”,如果连续几个周期都没有收到对方心跳,则可以判断对方或者宕机或者异常推出或者网络不通,此时也需要主动关闭己方连接,如果是客户端可在延迟一定时间后重新发起连接。虽然Socket有一个keep alive选项来维护连接,如果用该选项,一般需要两个小时才能发现对方的宕机、异常退出及网络不通。

第3个问题是处理效率问题。不管是客户端还是服务器,如果是长连接一个程序至少需要两个线程,一个用于接收数据,一个用于发送心跳,写数据不需要专门的线程,当然另外还需要一类线程(俗称Worker线程)用于进行消息的处理,也就是说接收线程仅仅负责接收数据,然后再分发给Worker进行数据的处理。如果是短连接,则不需要发送心跳的线程,如果是服务器还需要一个专门的线程负责进行连接请求的监听。这些是一个通信程序的整体要求,具体怎么设计你的程序,就看你自己的设计水平了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值