MYSQL8 变量“character_set_database”有啥用?
Posted
技术标签:
【中文标题】MYSQL8 变量“character_set_database”有啥用?【英文标题】:What is the use of MYSQL8 variable 'character_set_database'?MYSQL8 变量“character_set_database”有什么用? 【发布时间】:2020-10-23 04:55:41 【问题描述】:我使用 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 text, not images/links, for text--including tables & ERDs。解释或引用来自其他文本的信用。只提供您需要的东西并将其与您的问题联系起来。仅将图像用于无法表达为文本或增强文本的内容。 PS 请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:***.com 和标签;阅读许多答案。 How to Ask 感谢您的建议,我已经修改了我的问题。 这个还不清楚。你引用一个解释。你为什么要另一个?你被困在哪里了?你以什么方式理解这个术语或使用这个术语?您的帖子正文与标题有什么关系?你的问题到底是什么?你是怎么回答你的问题的? @philipxy 我想知道'character_set_database'变量的用法。 这并没有解决我的 cmets 问题。祝你好运。 PS 请通过编辑而不是 cmets 澄清。 【参考方案1】: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
选择了它。它被称为默认数据库,因为它在您省略语句中的数据库前缀时使用。
例子:
select * from test_db1.test1;
将返回相同的
use test_db1;
select select * from test1;
【讨论】:
以上是关于MYSQL8 变量“character_set_database”有啥用?的主要内容,如果未能解决你的问题,请参考以下文章
Windows系统安装MySQL8.0(2021-10-13)