当前位置:Gxlcms > 数据库问题 > 黑马day09 数据库乱码分析

黑马day09 数据库乱码分析

时间:2021-07-01 10:21:17 帮助过:26人阅读

首先在cmd窗口下,一个cmd窗口就是一个客户端,默认是使用gbk编码的,但是这个编码是不可以更改的。

当输入汉字"张"的时候客户端使用gbk进行编码:假设 张:1110 

服务器使用什么解码的?我们使用show variables like "character%";打印结果如下:

技术分享

解释:

-----+
| Variable_name            | Value
     |
+--------------------------+------
-----+
| character_set_client     | utf8 服务器认为客户机是使用utf-8进行编码的
     |
| character_set_connection | utf8 服务器认为客户机和服务器的连接是utf-8编码
     |
| character_set_database   | utf8
     |
| character_set_filesystem | binar
     |
| character_set_results    | utf8 服务器认为打印到命令行窗口使用的是utf-8编码
     |
| character_set_server     | utf8
     |
| character_set_system     | utf8

虽然服务器是这么认为的但是服务器认为的是错的,因此我需要让服务器知道客户机的编码是gbk

使用set names gbk;

然后查看show variables like "character%";

技术分享

这样子服务器就会使用gbk进行解码,然后服务器的编码是character_set_database   | utf8

gbk----------------->utf-8会乱码么?

其实底层是这样的,当服务器使用gbk解码后,即String s=new String (1110,gbk),然后编码 s.getBytes(utf-8)存放到数据库中的。

当我们取数据的时候呢是这个过程的逆向过程,转化为gbk的编码发送,因此客户机不会看到乱码。

原理图:

技术分享



黑马day09 数据库乱码分析

标签:mysql乱码分析

人气教程排行