mysql - MYSQL8 变量“character_set_database”有什么用?
问题描述
我使用 SQL 'show variables like 'character%';' 显示MySQL变量中的字符集。我找到了一个名为'character_set_database'的变量,我想知道它的用途。我从 MySQL 文档网站获得了一些信息。但我不知道文档上下文中“默认数据库”的含义。关键字“默认数据库”让我对变量“character_set_database”的使用感到困惑。
所以请帮我解释一下关键字' default database '或者直接使用变量' character_set_database '。
mysql网站中关于属性' character_set_database '的描述:
· character_set_database默认数据库
使用的字符集。每当默认数据库更改时,服务器都会设置此变量。如果没有默认数据库,则该变量具有与 character_set_server 相同的值。 从 MySQL 8.0.14 开始,设置此系统变量的会话值是一项受限操作。会话用户必须具有足以设置受限会话变量的权限。请参见第 5.1.9.1 节,“系统变量权限”。 全局 character_set_database 和 collation_database 系统变量已弃用,并将在 MySQL 的未来版本中删除。
不推荐为会话 character_set_database 和 collation_database 系统变量分配值,并且分配会产生警告。在 MySQL 的未来版本中,会话变量将变为只读,并且分配将产生错误。仍然可以访问会话变量以确定默认数据库的数据库字符集和排序规则。”
解决方案
该character_set_database
变量向您显示当前正在使用的数据库的默认字符集。要选择您使用的默认数据库:
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;
现在选择一个数据库并查看变量中的character_set_database
内容:
use test_db1;
select @@character_set_database;
将返回:'latin1'
use test_db2;
select @@character_set_database;
将返回:'utf8mb4'
当您没有明确指定时,数据库的默认字符集用于新表。例子:
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
如您所见,该表test1
正在使用CHARSET=latin1
我们已明确设置的 。
第二个结果将是:
CREATE TABLE `test2` (
`c` text COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
由于我们没有为表指定字符集test2
,它使用CHARSET=utf8mb4
的是数据库的默认字符集test_db2
。并且test_db2
目前是默认数据库,因为我们已经选择了use test_db2
. 它被称为default database,因为当您在语句中省略数据库前缀时使用它。
例子:
select * from test_db1.test1;
将返回与
use test_db1;
select select * from test1;
推荐阅读
- iis - 如果两个域都指向同一个 IP 地址,是否可以将多个域绑定到一个网站?
- javascript - react 钩子可以用来注入组件吗?
- javascript - 如何以通用形式使用正则表达式 javascript 提取值
- javascript - 正则表达式:Javascript、XML、字符串
- c# - Razor 页面中的“条件”字段
- sql-server - Excel 不能识别 SQL Server 变量语法吗?
- python - 如何使用列表推导编写以下代码?
- r - 如何使 1 成为条形图或雷达图的最高值?(ggplot)
- c++ - 使用 if 语句对 3 个数字进行排序
- css - 如果子项不为空,则将样式应用于父项