MySQL字符集繼承關係驗證


(1)創建數據庫時不指定字符集會繼承服務器字符集
Server characterset: utf8
Db     characterset: latin1


mysql> show global variables like 'character_set_database';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| character_set_database | latin1 | 
+------------------------+--------+
1 row in set (0.00 sec)


mysql> create database mytest2;
Query OK, 1 row affected (0.02 sec)


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


可見,創建數據庫時,若沒有指定字符集,那麼會繼承服務器的字符集,不受character_set_database值的影響。


(2)表創建不指定字符集時會繼承數據庫字符集
mysql> create database mytest1 charset=latin1;
Query OK, 1 row affected (0.04 sec)


mysql> show create database mytest1;
+----------+--------------------------------------------------------------------+
| Database | Create Database                                                    |
+----------+--------------------------------------------------------------------+
| mytest1  | CREATE DATABASE `mytest1` /*!40100 DEFAULT CHARACTER SET latin1 */ |   ## 這個可以看到,數據庫的字符集爲latin1
+----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)


mysql> use mytest1
Database changed
mysql> create table t(id int,name char(20));  ## 創建表t時沒有指定字符集
Query OK, 0 rows affected (0.13 sec)


mysql> show create table t\G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` int(11) DEFAULT NULL,
  `name` char(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)


可見,創建表時沒有指定字符集,那麼會繼承數據庫的字符集。




(3)創建表時,字段不指定字符集,則默認繼承表的字符集
mysql> show create database mytest1;
+----------+--------------------------------------------------------------------+
| Database | Create Database                                                    |
+----------+--------------------------------------------------------------------+
| mytest1  | CREATE DATABASE `mytest1` /*!40100 DEFAULT CHARACTER SET latin1 */ | 
+----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)


mysql> create table t3(id int,name char(20) character set utf8,text char(30));
Query OK, 0 rows affected (0.15 sec)


mysql> show create table t3\G
*************************** 1. row ***************************
       Table: t3
Create Table: CREATE TABLE `t3` (
  `id` int(11) DEFAULT NULL,
  `name` char(20) CHARACTER SET utf8 DEFAULT NULL,
  `text` char(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)


可見,如果表創建時,字段不指定字符集,字段的字符集就會繼承表的字符集。

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