MySQL字符集的四级设定与创建方法

本文详细阐述了MySQL字符集的设置方式,包括服务器、数据库、表和列级的字符集设定及其继承关系。通过实例演示了如何在不同层级设置和指定字符集,以及在指定情况下字符集的优先级关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    mysql字符集设定分了四级,它们依次为服务器级,数据库级,表级,列级,只要有需要,这些字符集可以任意指定。

    当然,mysql字符集四级设定存在一个继承关系,即在不指定字符集的情况下,数据库字符集将继承服务器的,而表将继承数据库的,列将继承表的。

    举例来说,初始指定的服务器字符集为gbk, 那么在创建数据库时,如果不为该数据库指定字符集,那么数据库创建后,该数据库的字符集就是gbk(服务器字符集);同样的,在该数据库下创建表时,如果不为表指定字符集,则表的字符集就为gbk(数据库字符集);这以规则同样适用于列,若不指定则列的字符集为表的字符集。

    以上四级字符集存在一个继承关系,并特别强调是不在特别指定的情况下发生,鉴于此,那么在特别指定的情况下会使怎么样的呢? mysql的优先级关系,从高到底一次为列级,表级,数据库级,服务器级。

    举例来说:如果初始指定的服务器字符集为gbk,那么在创建数据库时,若指定字符集为gb2312,那么该数据库的字符集就是gb2312;同样,若在该库下创建表时,指定的表的字符集是utf8,那么表的字符集就是utf8,在创建表时若指定的列的字符集是latin1,那么列的字符集就是latin1。

  1.  mysql 服务器(server字符集设置方法)

    在/etc/init.d/文件下有mysql的启动脚本,通过启动脚本中有下面一下话,就是如果想要影响MySQL变量,你应该创建,更改/etc下的my.conf文件,或者其他的MySQl的配置文件。

# If you want to affect other MySQL variables, you should make your changes
# in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.

看mysql的启动脚本可以清楚的知道很多细节的知识(加深shell脚本的学习的必要性),没有细读mysql的脚本,所有在此不做过多说明。

下面是在配置文件里更改mysql服务器的字符集,修改方法如下:my.cnf文件中

[mysqld]
#set the default character set.
character-set-server=gbk

设置数据库的字符集为gbk;

使用 service mysql restart重启myql服务器,连接mysql服务器,查看服务器的字符集设置为:

191231_Efyh_1475335.png

可以看到character_set_server和character_set_database的字符集变成了gbk,关于character_set_database也变成了gbk,这一点可以自行查阅去了解细节。

二、 MySQL 数据库(database)字符集设置方法:

    1. 继承性,在不指定字符集(上面创建服务器字符集为gbk),在创建数据库的字符集应该默认是gbk

mysql> create database db_test10;
Query OK, 1 row affected (0.00 sec)

mysql> show create database db_test10;
+-----------+-------------------------------------------------------------------+
| Database  | Create Database                                                   |
+-----------+-------------------------------------------------------------------+
| db_test10 | CREATE DATABASE `db_test10` /*!40100 DEFAULT CHARACTER SET gbk */ |
+-----------+-------------------------------------------------------------------+

可以看出数据库db_test10的字符集是gbk。

    2. 在创建数据库时,特意指定字符集

mysql> create database db_test11 default character set utf8;
Query OK, 1 row affected (0.00 sec)

mysql> show create database db_test11;
+-----------+--------------------------------------------------------------------+
| Database  | Create Database                                                    |
+-----------+--------------------------------------------------------------------+
| db_test11 | CREATE DATABASE `db_test11` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+-----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)

可以看出db_test11的字符集是为utf8。

三、MySQL表(table)的字符集设置

    1. 继承性mysql数据库使用db_test10(字符集为gbk),在创建表时,不指定字符集

mysql> use db_test10;
Database changed

mysql> create table table_test( 
    -> id INT(10) PRIMARY KEY,
    -> name VARCHAR(20));
Query OK, 0 rows affected (0.24 sec)

mysql> SHOW CREATE TABLE table_test;
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
| Table      | Create Table                                                                                                                                     |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
| table_test | CREATE TABLE `table_test` (
  `id` int(10) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

  可以看出table_test表的字符集为gbk;

  2. 在创建表时特意指定字符集,假设指定为utf8

mysql> CREATE TABLE table_test1( id INT(10) PRIMARY KEY, name VARCHAR(20)
    -> )DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.22 sec)

mysql> show create table table_test1;
+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------+
| Table       | Create Table                                                                                                                                       |
+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------+
| table_test1 | CREATE TABLE `table_test1` (
  `id` int(10) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

可以看出table_test1的字符集为指定的字符集utf8。

四、在MySQL表中列(column)字符集设置方法:

    1. 继承表的字符集,不为列特意指定,上面的table_test1表的中列的字符集为:

show full columns from table_test1;
+-------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type        | Collation       | Null | Key | Default | Extra | Privileges                      | Comment |
+-------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| id    | int(10)     | NULL            | NO   | PRI | NULL    |       | select,insert,update,references |         |
| name  | varchar(20) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         |
+-------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
2 rows in set (0.00 sec)

可以看出name是utf8。

 2.在创建表时,为列指定特定字符集(假设表的字符集为utf8, 而列的字符集为gbk)

mysql> CREATE TABLE table_test3(
    -> id INT(10) PRIMARY KEY,
    -> name VARCHAR(20) character set gbk default NUll
    -> ) DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.25 sec)

mysql> show full columns from table_test3;
+-------+-------------+----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type        | Collation      | Null | Key | Default | Extra | Privileges                      | Comment |
+-------+-------------+----------------+------+-----+---------+-------+---------------------------------+---------+
| id    | int(10)     | NULL           | NO   | PRI | NULL    |       | select,insert,update,references |         |
| name  | varchar(20) | gbk_chinese_ci | YES  |     | NULL    |       | select,insert,update,references |         |
+-------+-------------+----------------+------+-----+---------+-------+---------------------------------+---------+

可以看出name字段的字符集为gbk。

以上就是Mysql字符集的继承性和字符集默认的优先级关系。

本文学习自:http://hi.baidu.com/11haiou/item/212707dad7395f5ffb5768d3


转载于:https://my.oschina.net/lvhuizhenblog/blog/387661

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值