一、背景

      在mysql数据库中,默认使用的是latin字符集,所以无法正常的支持中文字符。在my.ini文件中将配置支持GBK编码,方便于后续数据库操作而不会报错误。

二、问题如下图所示

MySQL配置中文编码GBK的重要性_GBK编码

MySQL配置中文编码GBK的重要性_MySQL_02

MySQL配置中文编码GBK的重要性_MySQL_03

MySQL配置中文编码GBK的重要性_GBK编码_04

通过上述图,存在以下几个问题:

  1. 默认创建的数据库和表是latin1编码。
  2. my.ini配置文件中设置为: character-set_server=utf-8,将创创建数据和表默认为utf-8编码,不支持中文。
  3. 将现有utf-8编码转变为GBK编码,才可以支持中文的读与写。
  4. 最好的方式是配置my.ini支持GBK编码。

 三、解决问题

第一,创建table的时候就使用GBK编码;

create table students (
id   INT(11) UNSIGNED, 
name VARCHAR(32),
age INT(4)  unsigned,
sex  VARCHAR(16)   
) character set = GBK;

 第二,修改已经有的table的编码

当使用默认编码创建了一个table的时候,是不能支持中文的,这时候使用如下语句对table_name进行修改:

mysql>alter table students convert  to  character set  GBK

 此后再往这个table插入中文的时候,就可以正常存储和读取了,

第三,修改mysql的my.ini配置文件,让mysql默认编码为GBK

character-set-server=GBK
Show create database student; #查数据库编码
mysql> show create database student;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| student  | CREATE DATABASE `student` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+-----------------------------------------------------------------+
show create table student; #查看一个table的编码,假如table名为students:
mysql> show create table students;
| students | CREATE TABLE `students` (
  `id` int(11) unsigned DEFAULT NULL,
  `name` varchar(32) DEFAULT NULL,
  `age` int(4) unsigned DEFAULT NULL,
  `sex` varchar(16) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk |

 四、my.ini配置文件 

[mysqld]
port=3306
basedir=D:\mysql-5.7.18-winx64
datadir=D:\mysql-5.7.18-winx64\Data
sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character-set_server=gbk
mysql> status
--------------
mysql  Ver 14.14 Distrib 5.7.18, for Win64 (x86_64)
Connection id:          3
Current database:       student
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.7.18 MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    gbk
Db     characterset:    gbk
Client characterset:    gbk
Conn.  characterset:    gbk
TCP port:               3306
Uptime:                 1 min 56 sec
Threads: 1  Questions: 17  Slow queries: 0  Opens: 105  Flush tables: 1  Open tables: 98  Queries
per second avg: 0.146