mysql安装的时候一般都会指定字符集,如果没有指定,可能会出现数据库乱码问题。这里将mysql设置为utf8编码。
一:登录MySQL查看用SHOW VARIABLES LIKE ‘character%’;下字符集,显示如下:
一般来说,character_set_database和character_set_server编码格式正常就不会出现问题,如果还有问题那么就应该是连接层编码格式和数据编码格式不一致导致的。
可以设置一下
SET NAMES ‘utf8′;
它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
如下图所示:
这时候乱码问题就解决了,但是这个编码格式仅限于当前窗口,其他窗口还是会出现问题,那就需要永久解决编码问题,方式如下:
编辑my.cnf文件
init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行,也可以不设置)
然后重新启动,查看编码,如下图:
这时候编码就永久解决了。
参数说明:
character_set_client:客户端请求数据的字符集。
character_set_connection:从客户端接收到数据,然后传输的字符集。
character_set_database:默认数据库的字符集,无论默认数据库如何改变,都是这个字符集;如果没有默认数据库,使character_set_server指定的字符集,此参数无需设置。
character_set_filesystem:把操作系统上文件名转化成此字符集,即把character_set_client转换character_set_filesystem,默认binary即可。
character_set_results:结果集的字符集。
character_set_server:数据库服务器的默认字符集。
character_set_system:这个值总是utf8,不需要设置,存储系统元数据的字符集。
-------------------------------------------------------------以上是服务器上只要一个数据库的时候没有问题----
如果一台服务器上有两个数据库,并且编码格式不一致这样的话就,按照上面在配置文件中设置这character_set_client,character_set_connection,character_set_results三个值没有发生变化。
一个数据库端口是3306,配置文件路径:/etc/my.cnf 编码格式:gbk
一个数据库端口是3307,配置文件路径:/usr/local/mysql3307/my.cnf 编码格式utf8
登录mysql -u root -p 此时默认会加载/etc/my.cnf文件,编码格式会按照这个编码格式进行设置。如果你登录的是端口为3307的数据库查询编码这character_set_client,character_set_connection,character_set_results值会显示gbk,那么如何指定编码,需要在登录进去后执行:set names 'utf8'
如果是程序连接的话需要指定连接编码格式,这样也不会乱码:
jdbc.url=jdbc:mysql://localhost:3306/jk?useUnicode=true&characterEncoding=UTF-8