MySQL數(shù)據(jù)庫目錄下面的db.opt是干什么用的?
概述
MySQL數(shù)據(jù)庫存放數(shù)據(jù)目錄里的db.opt文件是MySQL建庫過程中自動(dòng)生成的。
細(xì)心的朋友可能會(huì)發(fā)現(xiàn)有時(shí)候在MySQL數(shù)據(jù)庫的某些庫目錄下有個(gè)db.opt文件,那這個(gè)文件是干什么用的呢?如果你用記事本等編輯器打開看的話,內(nèi)容很簡單,是用來記錄該庫的默認(rèn)字符集編碼和字符集排序規(guī)則用的。
db.opt
MySQL的每個(gè)數(shù)據(jù)庫目錄中有一個(gè)文件db.opt,該文件主要 用來存儲(chǔ)當(dāng)前數(shù)據(jù)庫的默認(rèn)字符集和字符校驗(yàn)規(guī)則。
- default-character-set=utf8
- default-collation=utf8_general_ci
該文件中存儲(chǔ)的是創(chuàng)建數(shù)據(jù)庫時(shí)默認(rèn)的字符集和字符集校驗(yàn)規(guī)則,則該數(shù)據(jù)庫在以后創(chuàng)建表時(shí)如果沒有指定字符集和校驗(yàn)規(guī)則,則該表的這兩個(gè)屬性將去自這兩個(gè)表。
MySQL數(shù)據(jù)庫目錄下面的db.opt是干什么用的?
MySQL源碼:
- /* Set table default charset, if not set
- SYNOPSIS
- set_table_default_charset()
- create_info Table create information
- DESCRIPTION
- If the table character set was not given explicitely,
- let’s fetch the database default character set and
- apply it to the table. */
- static void set_table_default_charset(THD *thd,
- HA_CREATE_INFO *create_info, char *db)
- {
- if (!create_info->default_table_charset)
- {
- HA_CREATE_INFO db_info;
- load_db_opt_by_name(thd, db, &db_info);
- create_info->default_table_charset= db_info.default_table_charset;
- }
字符集和字符集校驗(yàn)規(guī)則
創(chuàng)建數(shù)據(jù)庫時(shí)指定字符集和字符集校驗(yàn)規(guī)則:
- create database if not exists test default charset utf8 default collate utf8_general_ci;
修改數(shù)據(jù)庫的字符集和字符集校驗(yàn)規(guī)則:
- alter database test default [charset|character set ] latin1 default collate latin1_swedish_ci;
創(chuàng)建數(shù)據(jù)庫create database
- CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
- [create_specification] …
- create_specification:
- [DEFAULT] CHARACTER SET [=] charset_name
- | [DEFAULT] COLLATE [=] collation_name
也可以通過alter database修改
- ALTER {DATABASE | SCHEMA} [db_name]
- alter_specification …
- alter_specification:
- [DEFAULT] CHARACTER SET [=] charset_name
- | [DEFAULT] COLLATE [=] collation_name
總結(jié)
1、create database時(shí)會(huì)自動(dòng)生成一個(gè)文件db.opt,存放的數(shù)據(jù)庫的默認(rèn)字符集,show create database時(shí)顯示數(shù)據(jù)庫默認(rèn)字符集即db.opt中字符集。
2、這個(gè)文件丟失不影響數(shù)據(jù)庫運(yùn)行,該文件丟失之后新建表時(shí),找不到數(shù)據(jù)庫的默認(rèn)字符集,就把character_set_server當(dāng)成數(shù)據(jù)庫的默認(rèn)字符集,show create database時(shí)顯示character_set_server字符集。
后面會(huì)分享更多devops和DBA方面的內(nèi)容,感興趣的朋友可以關(guān)注下~