MYSQL8变量'character_set_database'有什么用?

What is the use of MYSQL8 variable 'character_set_database'?

我使用 SQL '显示像 'character%' 这样的变量;'显示MySQL variables.I中的字符集 找到一个名为'character_set_database'的变量,我想知道它的用途。我从 MySQL 文档网站获得了一些信息。但是我不知道文档上下文中 'default database' 的意思。关键字 'default database' 让我对变量 'character_set_database'.
的使用感到困惑 所以请帮我解释一下关键字'default database'或者直接使用变量'character_set_database'。

mysql 网站中关于属性“character_set_database”的描述:

· character_set_database


The character set used by the default database. The server sets this variable whenever the default database changes. If there is no default database, the variable has the same value as character_set_server.

As of MySQL 8.0.14, setting the session value of this system variable is a restricted operation. The session user must have privileges sufficient to set restricted session variables. See Section 5.1.9.1, “System Variable Privileges”.

The global character_set_database and collation_database system variables are deprecated and will be removed in a future version of MySQL.

Assigning a value to the session character_set_database and collation_database system variables is deprecated and assignments produce a warning. The session variables will become read-only in a future version of MySQL and assignments will produce an error. It will remain possible to access the session variables to determine the database character set and collation for the default database."

引用 link : character_set_database

character_set_database 变量显示当前在use 中的数据库的默认字符集。要 select 您使用的默认数据库:

use my_database;

考虑以下示例..

创建两个具有不同字符集的新数据库:

create database test_db1 character set latin1 collate latin1_general_ci;
create database test_db2 character set utf8mb4 collate utf8mb4_unicode_ci;

现在 select 一个数据库,看看 character_set_database 变量中有什么:

use test_db1;
select @@character_set_database;

将 return: 'latin1'

use test_db2;
select @@character_set_database;

将 return: 'utf8mb4'

当您没有明确指定时,数据库的默认字符集用于新的 table。示例:

use test_db2;

create table test1 (c text) default character set latin1 collate latin1_general_ci;
show create table test1;

create table test2 (c text);
show create table test2;

第一个结果将是:

CREATE TABLE `test1` (
  `c` text COLLATE latin1_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci

如您所见,table test1 正在使用我们已明确设置的 CHARSET=latin1

第二个结果将是:

CREATE TABLE `test2` (
  `c` text COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

由于我们没有为 table test2 指定字符集,它使用 CHARSET=utf8mb4,这是数据库的默认字符集 test_db2 . test_db2 目前是 默认数据库 ,因为我们用 use test_db2 选择了它。它被称为 default databse,因为当您在语句中省略数据库前缀时会使用它。

示例:

select * from test_db1.test1;

将return与

相同
use test_db1;
select select * from test1;