数据库中关于字符集的操作

一、查看字符集

1.查看MySQL数据库的字符集和校验规则

(1) show variables like 'character%';
(2) show variables like 'collation%'; 
(3) status;
mysql> show variables like 'character%';
+--------------------------+---------------------------------------------------------+
| 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                                                    |
| character_sets_dir       | D:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.01 sec)

mysql> show variables like 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci  |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set, 1 warning (0.01 sec)

mysql> status;
--------------
mysql  Ver 14.14 Distrib 5.7.24, for Win64 (x86_64)

Connection id:          3
Current database:       qsurvey
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.7.24-log MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    gbk
Conn.  characterset:    gbk
TCP port:               3306
Uptime:                 2 days 16 hours 49 min 36 sec

Threads: 1  Questions: 605  Slow queries: 0  Opens: 147  Flush tables: 1  Open tables: 140  Queries per second avg: 0.002
--------------

character set和collation的区别:

charset=character set(字符集),collation(校验规则),每一个字符集都对应一个校验规则,用于指定数据集是如何排序的,以及字符串的比对规则。

可以使用show collation;来查看所有的校验规则和其对应的字符集。

collation的命名分为这两类:

  • <charset>_<language/other>_<ci/cs>
  • <charset>_bin

例如:utf8_general_ci

ci/cs:大小写是否敏感。ci:case insensitive(大小写不敏感,也就是不区分大小写),cs:case sensitive(大小写敏感,区分大小写)

例如:utf_bin

bin:表示将字符串中的每一个字符用二进制数据存储,并且区分大小写

详细可参考:https://www.cnblogs.com/EasonJim/p/8128196.html

2.查看MYSQL所支持的字符集

show charset;
mysql> show charset;
+----------+---------------------------------+---------------------+--------+
| Charset  | Description                     | Default collation   | Maxlen |
+----------+---------------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese        | big5_chinese_ci     |      2 |
| dec8     | DEC West European               | dec8_swedish_ci     |      1 |
| cp850    | DOS West European               | cp850_general_ci    |      1 |
| hp8      | HP West European                | hp8_english_ci      |      1 |
| koi8r    | KOI8-R Relcom Russian           | koi8r_general_ci    |      1 |
| latin1   | cp1252 West European            | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European     | latin2_general_ci   |      1 |
| swe7     | 7bit Swedish                    | swe7_swedish_ci     |      1 |
| ascii    | US ASCII                        | ascii_general_ci    |      1 |
| ujis     | EUC-JP Japanese                 | ujis_japanese_ci    |      3 |
| sjis     | Shift-JIS Japanese              | sjis_japanese_ci    |      2 |
| hebrew   | ISO 8859-8 Hebrew               | hebrew_general_ci   |      1 |
| tis620   | TIS620 Thai                     | tis620_thai_ci      |      1 |
| euckr    | EUC-KR Korean                   | euckr_korean_ci     |      2 |
| koi8u    | KOI8-U Ukrainian                | koi8u_general_ci    |      1 |
| gb2312   | GB2312 Simplified Chinese       | gb2312_chinese_ci   |      2 |
| greek    | ISO 8859-7 Greek                | greek_general_ci    |      1 |
| cp1250   | Windows Central European        | cp1250_general_ci   |      1 |
| gbk      | GBK Simplified Chinese          | gbk_chinese_ci      |      2 |
| latin5   | ISO 8859-9 Turkish              | latin5_turkish_ci   |      1 |
| armscii8 | ARMSCII-8 Armenian              | armscii8_general_ci |      1 |
| utf8     | UTF-8 Unicode                   | utf8_general_ci     |      3 |
| ucs2     | UCS-2 Unicode                   | ucs2_general_ci     |      2 |
| cp866    | DOS Russian                     | cp866_general_ci    |      1 |
| keybcs2  | DOS Kamenicky Czech-Slovak      | keybcs2_general_ci  |      1 |
| macce    | Mac Central European            | macce_general_ci    |      1 |
| macroman | Mac West European               | macroman_general_ci |      1 |
| cp852    | DOS Central European            | cp852_general_ci    |      1 |
| latin7   | ISO 8859-13 Baltic              | latin7_general_ci   |      1 |
| utf8mb4  | UTF-8 Unicode                   | utf8mb4_general_ci  |      4 |
| cp1251   | Windows Cyrillic                | cp1251_general_ci   |      1 |
| utf16    | UTF-16 Unicode                  | utf16_general_ci    |      4 |
| utf16le  | UTF-16LE Unicode                | utf16le_general_ci  |      4 |
| cp1256   | Windows Arabic                  | cp1256_general_ci   |      1 |
| cp1257   | Windows Baltic                  | cp1257_general_ci   |      1 |
| utf32    | UTF-32 Unicode                  | utf32_general_ci    |      4 |
| binary   | Binary pseudo charset           | binary              |      1 |
| geostd8  | GEOSTD8 Georgian                | geostd8_general_ci  |      1 |
| cp932    | SJIS for Windows Japanese       | cp932_japanese_ci   |      2 |
| eucjpms  | UJIS for Windows Japanese       | eucjpms_japanese_ci |      3 |
| gb18030  | China National Standard GB18030 | gb18030_chinese_ci  |      4 |
+----------+---------------------------------+---------------------+--------+
41 rows in set (0.00 sec)

3.查看库的字符集

(1)show create database 数据库;
(2)show create database 数据库\G;
mysql> show create database qsurvey;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| qsurvey  | CREATE DATABASE `qsurvey` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show create database qsurvey\G;
*************************** 1. row ***************************
       Database: qsurvey
Create Database: CREATE DATABASE `qsurvey` /*!40100 DEFAULT CHARACTER SET utf8 */
1 row in set (0.00 sec)

4.查看表的字符集

show table status from 库名 like '表名';
mysql> show table status from qsurvey like 'user';
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Collation       | Checksum | Create_options | Comment |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------+
| user | InnoDB |      10 | Dynamic    |    9 |           1820 |       16384 |               0 |            0 |         0 |             10 | 2019-05-22 23:16:29 | 2019-05-22 23:20:32 | NULL       | utf8_general_ci |     NULL |                |         |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------+
1 row in set (0.02 sec)

mysql> show table status from qsurvey like 'user'\G;
*************************** 1. row ***************************
           Name: user
         Engine: InnoDB
        Version: 10
     Row_format: Dynamic
           Rows: 9
 Avg_row_length: 1820
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: 10
    Create_time: 2019-05-22 23:16:29
    Update_time: 2019-05-22 23:20:32
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

5.查看表中所有列的字符集

show full columns from 表名;
mysql> show full columns from user;
+-------------+------------------+-----------------+------+-----+-------------------+-----------------------------+---------------------------------+----------------------------+
| Field       | Type             | Collation       | Null | Key | Default           | Extra                       | Privileges                      | Comment                    |
+-------------+------------------+-----------------+------+-----+-------------------+-----------------------------+---------------------------------+----------------------------+
| id          | int(10) unsigned | NULL            | NO   | PRI | NULL              | auto_increment              | select,insert,update,references | 自增主键                   |
| user_name   | varchar(20)      | utf8_general_ci | NO   |     |                   |                             | select,insert,update,references | 用户名                     |
| password    | varchar(20)      | utf8_general_ci | NO   |     |                   |                             | select,insert,update,references | 密码                       |
| college     | varchar(30)      | utf8_general_ci | NO   |     |                   |                             | select,insert,update,references | 学院                       |
| major       | varchar(30)      | utf8_general_ci | NO   |     |                   |                             | select,insert,update,references | 专业                       |
| valid       | tinyint(4)       | NULL            | NO   |     | 1                 |                             | select,insert,update,references | 是否可用:0-不可用,1-可用 |
| create_time | timestamp        | NULL            | NO   |     | CURRENT_TIMESTAMP |                             | select,insert,update,references | 创建时间                   |
| modify_time | timestamp        | NULL            | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | select,insert,update,references | 更新时间                   |
+-------------+------------------+-----------------+------+-----+-------------------+-----------------------------+---------------------------------+----------------------------+
8 rows in set (0.02 sec)

二、修改字符集

设置字符集一般有两种方法,一种是在创建表的时候设置字符集,另一种是表建成之后修改字符集。

1.创建时指定字符集

创建库的时候指定字符集:

语法:create database 库名 default character set=字符集;

create database qsurvey default character set=utf8;

创建表的时候指定字符集:

语法:create table 表名(属性)default character set = ‘字符集’;

            create table 表名(属性)default charset = 字符集;

//设置存储引擎和字符集
CREATE TABLE `user`(
	`id` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键',
	`user_name` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '用户名',
	`password` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '密码',
	`college` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '学院',
	`major` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '专业',
	`valid` TINYINT NOT NULL DEFAULT 1 COMMENT '是否可用:0-不可用,1-可用',
	`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`modify_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

//设置字符集
mysql> create table test(id int,name varchar(10)) default character set = 'gbk';
Query OK, 0 rows affected (0.56 sec)
mysql> create table test1(id int,name varchar(10)) default charset = gbk;
Query OK, 0 rows affected (0.59 sec)

2.修改字符集

(1)修改全局字符集

/*建立连接使用的编码*/
set character_set_connection=utf8;
/*数据库的编码*/
set character_set_database=utf8;
/*结果集的编码*/
set character_set_results=utf8;
/*数据库服务器的编码*/
set character_set_server=utf8;
/*设置数据库系统字符集*/
set character_set_system=utf8;

set collation_connection=utf8;

set collation_database=utf8;

set collation_server=utf8;

(2)修改库的字符集

语法:alter database 库名 default character set 字符集;

alter database tmp default character set gbk;

(3)修改表的字符集

语法:alter table 表名 convert to character set 字符集;

alter table test1 convert to character set utf8;

(4)修改字段的字符集

语法:alter table 表名 modify 字段名 字段属性 character set gbk;

 alter table test1 modify name varchar(10) character set gbk;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值