今天在对数据库插入中文数据时中文乱码,一开始只是以为数据库的编码没 设成utf-8,然后改为utf-8之后还是不行!!!
然后度娘了很久之后,看到一篇博客写的很清晰,终于搞起了mysql中文乱码的原因。
首先通过设置把编码都设成utf-8: 如下图:
这样做看似可以了,其实查出的数据还是乱码!!!
继而了解mysql数据存储于查询过程的字符编码转换机制:
1、存储数据过程:
1)客户端发送数据到服务器端。
2)服务器端会把请求的数据从客户端字符集(character_set_client)转成服务器连接字符集(character_set_connection)。
3)然后服务器会检测存储区域(table,column)character_set_server的字符集,
然后把数据从连接字符集(character_set_connection)转为存储区域(table,column)character_set_server的字符集,然後再存储或者查询。
2、查询数据过程:
1)服务器将存储区域(table,column)character_set_server的字符集转换成服务器连接字符集(character_set_connection)。
2)将服务器连接字符集(character_set_connection)转换成结果字符集(character_set_results),再发送到客户端。
原因:windows下的dos不支持utf-8!!!
由此:通过 set names gbk;
最终的字符集:
dos端编码为gbk,因此能正确显示了中文。