數據庫中關於字符集的操作

一、查看字符集

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;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章