MySQL中ALTER DATABASE语句的使用

ALTER DATABASE 是一个数据库管理命令,主要用于修改或更改已存在数据库的各种属性和配置。

ALTER {DATABASE | SCHEMA} [db_name]alter_option ...
ALTER {DATABASE | SCHEMA} db_nameUPGRADE DATA DIRECTORY NAMEalter_option: {[DEFAULT] CHARACTER SET [=] charset_name| [DEFAULT] COLLATE [=] collation_name
}

ALTER DATABASE允许您修改数据库的整体特性。这些特性被保存在数据库目录中的db.opt文件里。这意味着,当您使用ALTER DATABASE命令更改某些设置时,这些更改会被记录在db.opt文件中,以便数据库系统能够在后续启动时恢复这些设置。

执行ALTER DATABASE语句需要对数据库拥有ALTER权限。ALTER SCHEMAALTER DATABASE的同义词。这意味着,当使用 ALTER SCHEMA 语句时,实际上是在执行与 ALTER DATABASE 相同的操作。

如果在ALTER DATABASE语句中省略了数据库名,并且当前会话有默认数据库,则该语句将应用于默认数据库。但是,如果会话中没有设置默认数据库,并且您尝试省略数据库名执行 ALTER DATABASE 语句,数据库管理系统将无法确定您想要修改哪个数据库,并会返回一个错误。

1 字符集和校对选项

要查看可用的字符集和校对规则,可以使用 SHOW CHARACTER SET 和 SHOW COLLATION 语句。这些语句会列出数据库管理系统支持的所有字符集和相应的校对规则。

CHARACTER SET (字符集)子句

用于更改数据库的默认字符集。字符集是一组字符的编码,它决定了如何将文本数据转换为二进制数据以存储在数据库中。

SHOW {CHARACTER SET | CHARSET}[LIKE 'pattern' | WHERE expr]

SHOW CHARACTER SET 语句用于显示所有可用的字符集。如果存在 LIKE 子句,它将指示要匹配的字符集名称。WHERE 子句可用于根据更一般的条件选择行,例如:

mysql> SHOW CHARACTER SET LIKE 'latin%';
+---------+-----------------------------+-------------------+--------+
| Charset | Description                 | Default collation | Maxlen |
+---------+-----------------------------+-------------------+--------+
| latin1  | cp1252 West European        | latin1_swedish_ci |      1 |
| latin2  | ISO 8859-2 Central European | latin2_general_ci |      1 |
| latin5  | ISO 8859-9 Turkish          | latin5_turkish_ci |      1 |
| latin7  | ISO 8859-13 Baltic          | latin7_general_ci |      1 |
+---------+-----------------------------+-------------------+--------+

SHOW CHARACTER SET 命令的输出包含以下列:

  • Charset:字符集名称。

  • Description:字符集的描述。

  • Default collation:该字符集的默认校对规则。

  • Maxlen:存储一个字符所需的最大字节数。

“文件名字符集”是仅供内部使用的,因此 SHOW CHARACTER SET 命令不会显示它。

字符集信息也可以从 INFORMATION_SCHEMA 数据库中的 CHARACTER_SETS 表获取。这个表提供了与 SHOW CHARACTER SET 类似的信息,但可以通过 SQL 查询进行更复杂的分析和操作。

COLLATE(校对) 子句

用于更改数据库的默认校对规则。校对规则决定了如何比较和排序字符串。不同的校对规则可能会对相同的字符集有不同的排序和比较行为。

SHOW COLLATION[LIKE 'pattern' | WHERE expr]

SHOW COLLATION 语句列出了服务器支持的所有校对规则(collation)。默认情况下,SHOW COLLATION 的输出包括所有可用的校对规则。可以使用 LIKE 子句来指定要匹配的校对规则名称模式。此外,也可以使用 WHERE 子句来根据更一般的条件选择行。例如:

mysql> SHOW COLLATION WHERE Charset = 'latin1';
+-------------------+---------+----+---------+----------+---------+
| Collation         | Charset | Id | Default | Compiled | Sortlen |
+-------------------+---------+----+---------+----------+---------+
| latin1_german1_ci | latin1  |  5 |         | Yes      |       1 |
| latin1_swedish_ci | latin1  |  8 | Yes     | Yes      |       1 |
| latin1_danish_ci  | latin1  | 15 |         | Yes      |       1 |
| latin1_german2_ci | latin1  | 31 |         | Yes      |       2 |
| latin1_bin        | latin1  | 47 |         | Yes      |       1 |
| latin1_general_ci | latin1  | 48 |         | Yes      |       1 |
| latin1_general_cs | latin1  | 49 |         | Yes      |       1 |
| latin1_spanish_ci | latin1  | 94 |         | Yes      |       1 |
+-------------------+---------+----+---------+----------+---------+

SHOW COLLATION 的输出包含以下列:

  • Collation:校对规则(collation)的名称。

  • Charset:与该校对规则关联的字符集(character set)的名称。

  • Id:校对规则的 ID。

  • Default:指示该校对规则是否是其字符集的默认校对规则。这通常是一个字符串,如 "Yes" 或 "No",但在某些数据库系统中可能是一个布尔值或数字。

  • Compiled:指示字符集是否已编译到服务器中。这通常是一个表示“是”或“否”的字符串,表明字符集是否是预编译的,或者是否在运行时动态加载。

  • Sortlen:这与使用该字符集表达的字符串排序所需的内存量有关。它通常表示排序算法在内部处理字符串时所需的最大字节数。

要查看每个字符集的默认校对规则,你可以使用以下 SQL 语句。

请注意,由于 Default 是一个保留字,所以当你将其作为标识符使用时,需要用反引号(`)将其括起来。如下所示:

mysql> SHOW COLLATION WHERE `Default` = 'Yes';
+---------------------+----------+----+---------+----------+---------+
| Collation           | Charset  | Id | Default | Compiled | Sortlen |
+---------------------+----------+----+---------+----------+---------+
| big5_chinese_ci     | big5     |  1 | Yes     | Yes      |       1 |
| dec8_swedish_ci     | dec8     |  3 | Yes     | Yes      |       1 |
| cp850_general_ci    | cp850    |  4 | Yes     | Yes      |       1 |
| hp8_english_ci      | hp8      |  6 | Yes     | Yes      |       1 |
| koi8r_general_ci    | koi8r    |  7 | Yes     | Yes      |       1 |
| latin1_swedish_ci   | latin1   |  8 | Yes     | Yes      |       1 |
...

当创建存储过程或函数时,如果这些存储例程中使用了数据库的默认字符集和校对规则,那么这些默认值会成为存储例程定义的一部分。在存储例程中,如果字符变量没有明确指定字符集或校对规则,那么它们会使用数据库的默认值。

重要的一点是,如果更改了数据库的默认字符集或校对规则,任何想要使用新默认值的存储例程都必须被删除并重新创建。这是因为存储例程在创建时已经固定了其使用的字符集和校对规则,不会自动跟随数据库默认值的更改而更新。因此,为了确保存储例程使用新的字符集和校对规则,需要重新创建这些例程。

2 Upgrading from Versions Older than MySQL 5.1

UPGRADE DATA DIRECTORY NAME 是 MySQL 中的一个特殊语法,它用于在特定的升级场景下更新与数据库关联的目录名,以确保数据库名到数据库目录名的映射使用 MySQL 5.1 及以后版本中引入的编码。这个语法通常在从较旧的 MySQL 版本升级到 MySQL 5.1 或更高版本时使用,以确保文件系统的兼容性。

具体来说,这个子句在以下条件下使用:

  • 当从 MySQL 的旧版本升级到 5.1 或更高版本时,UPGRADE DATA DIRECTORY NAME 子句用于更新数据库目录名到当前的编码格式,特别是当目录名包含需要编码的特殊字符时。
  • 这个子句通常不由用户直接调用,而是由 mysql_upgrade 工具自动使用,该工具在升级过程中调用 mysqlcheck 来检查并修复表、更新权限和转换数据库目录名(如果需要)。
  • 在升级过程中,mysql_upgrade 会检查数据目录中的每个数据库,并确定是否需要更新其目录名。如果需要,它会使用 UPGRADE DATA DIRECTORY NAME 语句来执行此操作。

例如,MySQL 5.0 中的数据库名为 a-b-c,对应的数据库目录也是 a-b-c。此时,数据库名称包含特殊字符(如破折号 -),那么数据库目录将直接使用这个名称,这可能在某些文件系统中引发问题,因为不是所有文件系统都支持在文件名中使用这些特殊字符。然而,在 MySQL 5.1 及更高版本中,为了提高兼容性和安全性,数据库名称中的特殊字符会被转换成一种编码形式,这样生成的目录名对所有文件系统都是中立的。因此,在 MySQL 5.1 及之后的版本中,数据库名 a-b-c 会被编码为 a@002db@002dc,其中 @002d 是破折号 - 的十六进制 Unicode 编码。

在 MySQL 升级过程中,从旧版本升级到 5.1 或更高版本时,为了保持向后兼容性,服务器会将旧格式的数据库名(如 a-b-c)显示为带有 #mysql50# 前缀的名称(如 #mysql50#a-b-c)。这是为了确保在升级过程中,旧的应用程序或工具可以继续访问和引用这些数据库,尽管它们使用的是旧的命名格式。

然而,一旦升级完成,并且你确信所有的应用程序和工具都已经更新为使用新的 MySQL 版本,那么你可能希望将数据库目录名从带有 #mysql50# 前缀的旧格式转换为新的编码格式。这时,你可以使用 UPGRADE DATA DIRECTORY NAME 语句来显式地告诉服务器重新编码数据库目录名到当前的编码格式。

ALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME;

执行此语句后,您可以将数据库引用为a-b-c,而不需要特殊的#mysql50#前缀。

注意:

UPGRADE DATA DIRECTORY NAME子句在MySQL 5.7中被弃用,在MySQL 8.0中被删除。如果需要转换MySQL 5.0数据库或表名,解决方法是在升级到MySQL 8.0之前将MySQL 5.0安装升级到MySQL 5.1。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/861131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rollup-plugin-visualizer 打包体积分析插件(vue+vite)

安装: npm install rollup-plugin-visualizer基本用法: vite.config.js import { visualizer } from rollup-plugin-visualizermodule.exports {plugins: [visualizer({open: true, // 注意这里要设置为true,否则无效 gzipSize: true, /…

在数字化转型中,数字孪生技术的作用和价值几何?

引言:随着全球化和市场竞争的加剧,企业需要通过数字化转型来提高生产效率、优化产品质量、降低成本,以增强自身竞争力。企业需要通过数字化转型更好地理解客户需求,提供个性化、定制化的产品和服务,从而满足客户的多样…

无人门店社区拼团小程序系统源码

​打造便捷购物新体验 🛒 引言:社区购物新趋势 随着科技的飞速发展,无人门店和社区拼团已经成为购物的新趋势。而结合这两者的“无人门店社区拼团微信小程序”更是为我们带来了前所未有的便捷购物体验。无需排队、无需现金交易,只…

平面点云格网过程及可视化介绍(python)

1、背景介绍 实际人工构造物中,很多物体表面为平面结构,因此将点云投影在二维平面上进行处理,如进行点云面积计算、点云边缘提取等。 具体案例可以参考博客:详解基于格网法统计平面点云面积_点云格网法计算xy投影面积-CSDN博客、点…

FTP服务器的错误码和异常处理介绍

在FTP服务器中,常见的错误码包括但不限于: 1、421 服务不可用: 原因:服务器无法接受新的连接,可能是因为达到了连接数限制或者服务器正在执行重启操作。 处理:等待一段时间后重试连接,或联系服务…

chatGPT是什么?到底用了什么技术呢?未来apple intelligence会用chatgpt的大模型?

本文尽可能精简的讲解openai的chatgpt 文章目录 前言一、chatgpt是什么?1. 基础架构2. 训练过程3. 应用场景4. 技术特点5. 局限性 二、树形图ChatGPT 大致架构 总结 前言 随着人工智能的不断发展,Ai对话工具的使用也越来越广泛。由国外openai推出的chatg…

【高考志愿】计算机

目录 一、专业概述 二、就业方向 三、选择建议 四、注意事项 高考志愿选择计算机专业,无疑是一个充满挑战与机遇的决策。这个专业以其广泛的应用领域、前沿的技术研究和可观的就业前景,吸引了无数考生的目光。 一、专业概述 计算机专业是一门以计算…

Keka for Mac:轻量级压缩解压神器

Keka for Mac是一款专为Mac用户打造的轻量级压缩解压软件,凭借其强大的功能和简洁易用的界面,赢得了众多用户的喜爱。无论是日常办公还是学习娱乐,Keka都能为您提供高效、安全的文件压缩和解压体验。 Keka for Mac v1.4.2中文版下载 产品特点…

Promise入门详解

文章目录 Promise 的介绍和优点(为什么需要 Promise?)Promise 的基本使用Promise 的状态和回调函数Promise 对象的 3 种状态 Promise 的回调函数Promise的状态图: new Promise() 是同步代码Promise 封装定时器Promise 封装 Ajax 请…

同步时钟系统为何能成为机场时间管理的好伙伴?

在机场这个分秒必争的环境中,精准的时间管理至关重要。同步时钟系统的出现,成为了机场时间管理的得力助手,为机场的高效运行和服务质量的提升发挥了关键作用。 一、同步时钟系统简介 同步时钟系统是一种通过网络技术实现时间同步的高精度计时…

给前端小白的11个建议(少走弯路)

作为一个编程4年的的前端工程师,一路走来踩过许多坑。希望我的经验能让你少踩些坑,在编程的路上走的更顺些! 1. 禁用var声明 只使用const或let声明变量。并且首选const,当一个变量需要重新赋值时,才使用let。并且在创…

队列与循环队列

目录 1. 前言: 2. 队列 2.1 队列的概念 2.2 队列的实现 2.3 队列的声明 2.4 队列的初始化 2.5 队列的入队 2.6 队列的出队 2.7 队列获取队头元素 2.8 队列获取队尾元素 2.9 队列获取有效数据个数 2.10 队列判断是否为空 2.11 打印队列 2.12 销毁队列 …

RK3568技术笔记十七 让Linux支持GPIOLIB

在 Linux 系统中,为了操作和管理 RK3568 的 GPIO 引脚,需要使用 GPIOLIB 这一子系统。关于在 RK3568 上使用 GPIOLIB 的用法如下: 1. 硬件平台初始化 首先,在使用 GPIOLIB 之前,需要确保 RK3568 的硬件平台初始化正确…

大厂面试经验分享,小白如何在面试中脱颖而出

前言 毕业季,对于每一位即将步入社会的学子来说,都是一个充满挑战和机遇的时刻。作为我的一位好朋友也是好学长,他刚刚在一家顶尖科技公司斩获了他梦寐以求的职位。他深知求职路上的艰辛,因此打算把自己的经验分享给大家&#xf…

【GitOps】使用Google工具JIB实现本地无需安装容器推送镜像,加速SpringCloud项目开发

文章目录 一、效果展示二、简介三、安装Jib插件1、区分环境2、安装插件一、效果展示 本地是window系统,无docker环境,没有任何runtime,使用jib工具打包镜像并推送完成,用时20秒 二、简介 Jib 是 Google 开发的一款开源工具,旨在帮助 Java 开发者更高效地将 Java 应用程…

多业态、多品牌企业,如何实现积分通积通兑?(附大会员方案)

2021年,龙湖升级珑珠为全业态通用积分,招商荟深度接入招商蛇口大会员体系建设;2022年,华润置地大会员“万象星”正式上线;2023年,“蒙牛生活家会员中心”全新上线…… 越来越多地产、零售等行业的集团品牌…

【JavaScript】JS对象和JSON

目录 一、创建JS对象 方式一:new Object() 方式二:{属性名:属性值,...,..., 方法名:function(){ } } 二、JSON格式 JSON格式语法: JSON与Java对象互转: 三、JS常见对象 3.1数组对象API 3.2 其它对象API 一、创建JS对象 方式一:new…

初创企业合规管理中的企业合规义务边界问题

在初创企业的迅猛发展过程中,合规管理是确保公司可持续成长和避免潜在风险的关键因素。而在合规管理中,界定企业边界尤为重要,它关系到企业如何合理规划业务范围、管理内部外部关系以及维护企业形象和法律责任的清晰。 一、初创企业面临的合…

早餐店小程序开发

在快节奏的城市生活中,早餐对于许多人来说是一天中最重要的一餐。然而,传统的早餐店在经营过程中常常面临客流量不稳定、服务效率低下等问题。为了解决这些问题,越来越多的早餐店老板开始寻求利用科技手段提升经营效率。早餐店小程序作为一种…

c#文件读写

1.1读取文件 方法说明​File.ReadAllText(FilePath);​读取指定路径的文件​File.ReadAllText(FilePath, Encoding);​通过指定编码格式来读取指定文件​File.ReadAllBytes();​读取二进制文件,并把内容读取到一个字节数组​File.ReadAllLines();​以行的形式读取文…