更新时间:

#sql巨慢之utf8mb4的隐藏问题(转)

一个找问题,解决问题的过程

  • show SESSION VARIABLES ;
  • show SESSION status ;
#workbench中显示如下
  • character_set_client utf8
  • character_set_connection utf8
  • character_set_database utf8
  • character_set_filesystem binary
  • character_set_results utf8
  • character_set_server utf8mb4
  • character_set_system utf8
#而在navicat中显示
  • character_set_client utf8mb4
  • character_set_connection utf8mb4
  • character_set_database utf8
  • character_set_filesystem binary
  • character_set_results utf8mb4
  • character_set_server utf8mb4
  • character_set_system utf8

原文链接: https://my.oschina.net/qixiaobo025/blog/1627067

#set names utf8

是用于设置编码,可以再在建数据库的时候设置,也可以在创建表的时候设置,或只是对部分字段进行设置,而且在设置编码的时候,这些地方最好是一致的,这样能最大程度上避免数据记录出现乱码。
执行SET NAMES utf8的效果等同于同时设定如下:

SET character_set_client='utf8';
SET character_set_connection='utf8';
SET character_set_results='utf8';

另外,如果数据出现乱码可以试着用以下办法解决:
一、避免创建数据库及表出现中文乱码和查看编码方法
1、创建数据库的时候:CREATE DATABASE test

CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';

2、建表的时候

CREATE TABLE `database_user` (
`ID` varchar(40) NOT NULL default '',
`UserID` varchar(40) NOT NULL default '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这3个设置好了,基本就不会出问题了,即建库和建表时都使用相同的编码格式。
如果是已经建了库和表可以通过以下方式进行查询。

1.查看默认的编码格式:

mysql> show variables like "%char%";
+--------------------------+---------------+
| Variable_name | Value |
+--------------------------+---------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+-------------+

注:以前2个来确定,可以使用set names utf8,set names gbk设置默认的编码格式;