MySQL数据库目录下面的db.opt是干什么用的?

数据库 MySQL
细心的朋友可能会发现有时候在MySQL数据库的某些库目录下有个db.opt文件,那这个文件是干什么用的呢?如果你用记事本等编辑器打开看的话,内容很简单,是用来记录该库的默认字符集编码和字符集排序规则用的。

概述

MySQL数据库存放数据目录里的db.opt文件是MySQL建库过程中自动生成的。

细心的朋友可能会发现有时候在MySQL数据库的某些库目录下有个db.opt文件,那这个文件是干什么用的呢?如果你用记事本等编辑器打开看的话,内容很简单,是用来记录该库的默认字符集编码和字符集排序规则用的。

db.opt

MySQL的每个数据库目录中有一个文件db.opt,该文件主要 用来存储当前数据库的默认字符集和字符校验规则。 

  1. default-character-set=utf8  
  2. default-collation=utf8_general_ci 

该文件中存储的是创建数据库时默认的字符集和字符集校验规则,则该数据库在以后创建表时如果没有指定字符集和校验规则,则该表的这两个属性将去自这两个表。

MySQL数据库目录下面的db.opt是干什么用的?

MySQL源码: 

  1. /* Set table default charset, if not set  
  2. SYNOPSIS  
  3. set_table_default_charset()  
  4. create_info Table create information  
  5. DESCRIPTION  
  6. If the table character set was not given explicitely,  
  7. let’s fetch the database default character set and  
  8. apply it to the table. */  
  9. static void set_table_default_charset(THD *thd,  
  10. HA_CREATE_INFO *create_info, char *db)  
  11.  
  12. if (!create_info->default_table_charset)  
  13.  
  14. HA_CREATE_INFO db_info;  
  15. load_db_opt_by_name(thd, db, &db_info);  
  16. create_info->default_table_charsetdb_info.default_table_charset;  

字符集和字符集校验规则

创建数据库时指定字符集和字符集校验规则: 

  1. create database if not exists test default charset utf8 default collate utf8_general_ci; 

修改数据库的字符集和字符集校验规则: 

  1. alter database test default [charset|character set ] latin1 default collate latin1_swedish_ci; 

创建数据库create database 

  1. CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name  
  2. [create_specification] …  
  3. create_specification:  
  4. [DEFAULT] CHARACTER SET [=] charset_name  
  5. | [DEFAULT] COLLATE [=] collation_name 

也可以通过alter database修改 

  1. ALTER {DATABASE | SCHEMA} [db_name]  
  2. alter_specification …  
  3. alter_specification: 
  4.  [DEFAULT] CHARACTER SET [=] charset_name  
  5. | [DEFAULT] COLLATE [=] collation_name 

总结

1、create database时会自动生成一个文件db.opt,存放的数据库的默认字符集,show create database时显示数据库默认字符集即db.opt中字符集。

2、这个文件丢失不影响数据库运行,该文件丢失之后新建表时,找不到数据库的默认字符集,就把character_set_server当成数据库的默认字符集,show create database时显示character_set_server字符集。

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

 

责任编辑:庞桂玉 来源: 今日头条
相关推荐

2020-04-22 13:29:35

基带射频信号

2018-03-05 18:50:22

Linux主目录隐藏文件

2023-09-21 15:54:55

数据中心

2021-04-16 21:21:02

HTML锚点元素

2010-06-17 15:54:04

SQL Server数

2023-10-07 14:51:46

物联网物联网平台

2022-12-02 14:57:15

物联网物联网平台

2021-12-29 14:33:59

5G4GWi-Fi

2013-04-03 12:57:01

Android开发读写assets目录下

2020-11-24 17:22:15

数据库MySQL技术

2010-08-26 09:33:18

DB2数据库

2024-01-16 23:30:46

​fractionsPython分数

2012-06-11 10:02:35

2018-08-30 17:14:56

2010-08-27 11:08:59

DB2安装目录

2009-09-14 08:57:30

2012-12-31 13:54:00

大数据google数据科学家

2019-08-09 16:01:18

Hadoop数据库

2022-02-16 22:37:00

流式SQLSQL数据库

2015-11-03 15:25:24

点赞
收藏

51CTO技术栈公众号