当前位置: 首页 > news >正文

【MySQL系列】深入理解MySQL中的存储、排序字符集

image

前言

  在创建数据库时,我们经常会需要填写数据库的所用字符集、排序规则,字符集和排序规则是两个非常重要的概念,它们决定了数据库如何存储和比较字符串数据。在 MySQL 中,常用的存储字符集有 utf8、utf8mb4,而排序字符集有 utf8mb4_unicode_ci、utf8mb4_general_ci、utf8mb4_bin、utf8mb4_0900_ai_ci,如下图所示。今天我们来探讨一下MySQL中几种常用的字符集和排序规则之间的区别和适用场景。

image

一、存储字符集

  utf8mb4 和 utf8 是 MySQL 中两种常用的字符集,它们都可以用来存储 Unicode 字符,但是有一些区别和联系。接下来,我们将从以下几个方面对比 utf8mb4 和 utf8。

1.1 字符集简介

  utf8 是 Mysql 中最早支持的 Unicode 字符集,是一种可变长度的字符编码方式,可以表示世界上几乎所有的字符。它使用 1 到 3 个字节的 UTF-8 字符,具体取决于字符的编码范围。

  要在 Mysql 中保存 4 字节长度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以后的才支持。个人觉得,为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8。

1.2 区别详解

  • 编码范围
    • UTF-8 可以表示大多数常见的字符,但对于一些罕见的字符和 emoji 表情等,可能无法正确表示。这些字符需要 4 个字节来编码,所以 utf8 会在遇到这些字符时报错或者出现乱码。
    • utf8mb4 则可以表示几乎所有的 Unicode 字符,能够存储 Emoji 表情、部分罕用汉字、新增的 Unicode 字符等。
  • 存储需求
    • 由于 utf8mb4 可以表示更多的字符,所以它通常需要比 UTF-8 更多的存储空间。具体来说,UTF8MB4 可能需要使用 1 到 4 个字节来表示一个字符,而 UTF-8 通常只需要使用 1 到 3 个字节。
    • 对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR 替代 CHAR。例如,一个 CHAR(10) 类型的字段,如果使用 utf8 字符集,那么它需要保留 10 * 3 = 30 个字节的空间。如果使用 utf8mb4 字符集,那么它需要保留 10 * 4 = 40 个字节的空间。
    • 对于 VARCHAR 类型的字段,如果使用 utf8 字符集,那么它需要额外使用一个字节来记录字符串的长度。如果使用 utf8mb4 字符集,那么它需要额外使用两个字节来记录字符串的长度。
  • 兼容性
    • UTF-8 是一种广泛使用的字符集,几乎所有的操作系统和编程语言都支持它。因此,如果需要与其他系统进行数据交换,UTF-8 可能是一个更好的选择。
    • 如果需要支持更广泛的字符范围,或者需要更高的安全性和兼容性,那么应该使用 utf8mb4 字符集。utf8mb4 虽然可以表示更多的字符,但并不是所有的系统都支持它。在使用 utf8mb4 时,需要确保应用程序和数据库服务器都支持这个字符集。

1.3 选择建议

  • 如果应用程序只需要处理常见的字符,那么 UTF-8 可能是一个不错的选择,它具有广泛的兼容性和较低的存储需求。
  • 如果应用程序需要处理一些罕见的字符或 emoji 表情等,那么 utf8mb4 可能是更好的选择,它可以确保数据能够正确地存储和显示所有的字符。
  • 在选择字符集时,还需要考虑数据库的性能和存储需求。如果数据库中存储了大量的文本数据,那么选择一个合适的字符集可以提高数据库的性能和存储效率

  总之,UTF-8 和 utf8mb4 都是 MySQL 中常用的字符集选项,都可以用来存储 Unicode 字符,它们之间的区别主要在于编码范围、存储需求和兼容性。在选择字符集时,需要根据应用程序的具体业务需求和实际情况来进行选择,以确保数据能够正确地存储和显示。虽然,utf8mb4 比 utf8 需要更多的存储空间,并且在某些情况下可能会导致性能略有下降。不过在现代硬件和应用场景下,utf8mb4 的性能影响通常可以忽略不计。

二、排序规则

2.1 排序规则概述

  排序规则是指在比较和排序字符串时所遵循的规则,用于定义字符的排序和比较方式,而排序规则会影响字符串的比较、排序等操作。不同的字符集可以有不同的排序规则,甚至同一个字符集也可以有多种排序规则。在 MySQL中,比较常用的字符集是utf8和utf8mb4,这两个字符集是类似的,查看下 utf8mb4 字符集下支持的所有比较规则:

SHOW COLLATION LIKE 'utf8\_%';
SHOW COLLATION LIKE 'utf8mb4\_%';
Collation(排序方式)Charset(字符集)IdDefault(默认值)CompiledSortlen(排序)
utf8mb4_general_ciutf8mb445YesYes1
utf8mb4_binutf8mb446Yes1
utf8mb4_unicode_ciutf8mb4224Yes8
utf8mb4_icelandic_ciutf8mb4225Yes8
utf8mb4_latvian_ciutf8mb4226Yes8
utf8mb4_romanian_ciutf8mb4227Yes8
utf8mb4_slovenian_ciutf8mb4228Yes8
utf8mb4_polish_ciutf8mb4229Yes8
utf8mb4_estonian_ciutf8mb4230Yes8
utf8mb4_spanish_ciutf8mb4231Yes8
utf8mb4_swedish_ciutf8mb4232Yes8
utf8mb4_turkish_ciutf8mb4233Yes8
utf8mb4_czech_ciutf8mb4234Yes8
utf8mb4_danish_ciutf8mb4235Yes8
utf8mb4_lithuanian_ciutf8mb4236Yes8
utf8mb4_slovak_ciutf8mb4237Yes8
utf8mb4_spanish2_ciutf8mb4238Yes8
utf8mb4_roman_ciutf8mb4239Yes8
utf8mb4_persian_ciutf8mb4240Yes8
utf8mb4_esperanto_ciutf8mb4241Yes8
utf8mb4_hungarian_ciutf8mb4242Yes8
utf8mb4_sinhala_ciutf8mb4243Yes8
utf8mb4_german2_ciutf8mb4244Yes8
utf8mb4_croatian_ciutf8mb4245Yes8
utf8mb4_unicode_520_ciutf8mb4246Yes8
utf8mb4_vietnamese_ciutf8mb4247Yes8

  这些比较规则的命名还挺有规律的,具体规律如下:

  • 比较规则名称以与其关联的字符集的名称开头,如上述查询结果的比较规则名称都是以utf8mb4开头的。

  • 后边紧跟着该比较规则主要作用于哪种语言,比如 utf8_polish_ci 表示以波兰语的规则比较,utf8_spanish_ci 是以西班牙语的规则比较,utf8_general_ci 是一种通用的比较规则。

  • 名称后缀意味着该比较规则是否区分语言中的重音、大小写啥的,具体可以用的值如下:

    后缀英文释义描述
    _aiaccent insensitive不区分重音。也就是说,排序时 e、è、é、ê 和 ë 之间没有区别。
    _asaccent sensitive区分重音。
    _cicase insensitive不区分大小写,即 “大小写不敏感”。
    _cscase sensitive区分大小写,即大小写敏感。
    _binbinary以二进制方式比较,区分大小写和重音符号。

  比如 utf8mb4_general_ci 这个比较规则是以 ci 结尾的,说明不区分大小写。每种字符集都有一种默认的比较规则,SHOW COLLATION 返回结果中的Default 列的值为 YES 的就是该字符集的默认比较规则,比如 utf8mb4 字符集默认规则就是utf8mb4_general_ci,又比如utf8字符集默认规则就是 utf8_general_ci。排序规则的不同会影响字符串的比较和排序的结果,进而影响索引的效率和查询的性能。一般来说,_bin 排序规则的性能最高,因为它只需要按照二进制方式比较字符串,不需要考虑字符的大小写和重音符号等因素。_general_ci 排序规则的性能次之,因为它只需要按照一般方式比较字符串,不需要考虑字符的语言或地区等因素。_unicode_ci 和 _ci 排序规则的性能最低,因为它们需要按照 Unicode 标准或特定语言或地区的方式比较字符串,需要考虑字符的大小写和重音符号等因素。

2.2 比较规则

  比较规则可以作用于四个级别,分别是服务器级别、数据库级别、表级别、列级别。服务器级别的比较规则由collation_server参数控制,如果创建数据库、表、列时没有显式的指定比较规则,则会继承上一级的比较规则。下面给出创建及修改库、表、列的比较规则的示例语句:

-- 创建数据库指定比较规则
CREATE DATABASE 数据库名[[DEFAULT] CHARACTER SET 字符集名称][[DEFAULT] COLLATE 比较规则名称];-- 修改数据库的比较规则
ALTER DATABASE 数据库名[[DEFAULT] CHARACTER SET 字符集名称][[DEFAULT] COLLATE 比较规则名称];-- 创建表时指定比较规则
CREATE TABLE 表名 (列的信息)[[DEFAULT] CHARACTER SET 字符集名称][COLLATE 比较规则名称]]-- 修改表的比较规则
ALTER TABLE 表名[[DEFAULT] CHARACTER SET 字符集名称][COLLATE 比较规则名称]# 创建时指定列的比较规则
CREATE TABLE 表名(列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称],其他列...
);-- 修改列的比较规则
ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];

2.3 排序字符集

  utf8 字符集默认规则是 utf8_general_ci,常用到的有utf8_general_ci、utf8_unicode_ci、utf8_bin等。而 utf8mb4 字符集默认规则是utf8mb4_general_ci,常用到的有utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_bin等,其他比较规则基本很少会用,下面简单了解下这几种规则的异同。

utf8_bin、utf8mb4_bin

  将字符串每个字符用二进制数据编译存储,区分大小写,也区分重音符号。_bin 的比较方法其实就是直接将所有字符看作二进制串,然后从最高位往最低位比对,所以很显然它是区分大小写的。

utf8_general_ci、utf8mb4_general_ci

  utf8_general_ci 是 utf8 字符集的一种排序规则,不区分大小写,也不区分重音符号。utf8mb4_general_ci 是utf8字符集的一种排序规则,不支持扩展,它仅能够在字符之间进行逐个比较,不区分大小写,但会区分重音符号。utf8_general_ci 校对规则进行的比较速度很快,但是与使用 utf8mb4_unicode_ci 的校对规则相比,比较正确性较差。

注意:utf8mb4_general_ci 与 utf8_general_ci 基本兼容,只是前者支持更多字符。

utf8_unicode_ci、utf8mb4_unicode_ci

  是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。

utf8mb4_0900_ai_ci

  MySQL 8.0 默认的是 utf8mb4_0900_ai_ci,属于 utf8mb4_unicode_ci 中的一种。

  以前,utf8mb4_general_ci 是默认排序规则。由于 utf8mb4_0900_ai_ci 排序规则现在是默认排序规则,因此默认情况下新表格可以存储基本多语言平面之外的字符。现在可以默认存储表情符号。如果需要重音灵敏度和区分大小写,则可以使用 utf8mb4_0900_as_cs 代替。

三、附录

3.1 utf8mb4_unicode_ci 和 utf8mb4_general_ci 的区别

  • 准确性

    排序字符集说明
    utf8mb4_unicode_ci是基于标准的 Unicode 来排序和比较,能够在各种语言之间精确排序。
    utf8mb4_general_ci没有实现 Unicode 排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。

    注意:在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。

  • 性能

    排序字符集说明
    utf8mb4_general_ci在比较和排序的时候更快。
    utf8mb4_unicode_ci在特殊情况下,Unicode 排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。

    注意:在绝大多数情况下,不会发生此类复杂比较。

3.2 实践建议

在开发时,个人建议:

  • 尽可能使用 utf8mb4 字符集,以确保能够支持完整的 Unicode 字符集。
  • 根据具体需求选择合适的排序规则,大多数情况下可以使用 utf8mb4_general_ci
  • 在创建表和列时就指定字符集和排序规则,避免以后出现编码问题。
  • 如果需要存储大小写或重音符号敏感的数据,使用 utf8mb4_bin 排序规则。
  • 对于加密数据或需要按二进制方式比较的场景,也应该使用 utf8mb4_bin

四、总结

  虽然推荐用 utf8mb4_unicode_ci,但是用 utf8mb4_general_ci 也没啥问题。因为 utf8mb4_unicode_ci 比较准确,utf8mb4_general_ci 速度比较快。通常情况下,新建数据库和创建 varchar 字符集类型字段时,一般选用 utf8mb4_general_ci 就可以。

  通过正确设置和使用字符集及排序规则,我们可以有效地在 MySQL 中存储和处理 Unicode 字符数据,确保数据的完整性和一致性。编码问题一直是web开发中的一个棘手问题,希望这篇文章能够帮助大家更好地理解和应对编码相关的挑战。

image

相关文章:

【MySQL系列】深入理解MySQL中的存储、排序字符集

前言 在创建数据库时,我们经常会需要填写数据库的所用字符集、排序规则,字符集和排序规则是两个非常重要的概念,它们决定了数据库如何存储和比较字符串数据。在 MySQL 中,常用的存储字符集有 utf8、utf8mb4,而排序字符…...

【ARM Coresight OpenOCD 系列 5.1 -- OpenOCD 无法识别CPUID 问题: xxx is unrecognized】

请阅读【嵌入式开发学习必备专栏】 文章目录 OpenOCD 无法识别CPUID 问题ARM CPUIDCPUID 特性CPUID 寄存器字段OpenOCD 无法识别CPUID 问题 在使用OpenOCD 进行CPU debug的过程中有时会报出 无法识别CPUID的问题,本文将会介绍如何解决这个问题。首先我们来学习下什么是CPUID,…...

YOLOv11融合针对小目标FFCA-YOPLO中的FEM模块及相关改进思路

YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《FFCA-YOLO for Small Object Detection in Remote Sensing Images》 一、 模块介绍 论文链接:https://ieeexplore.ieee.org/document/10…...

【Docker容器】一、一文了解docker

1、什么是docker? 1.1 docker概念 Docker是一种容器化平台,通过使用容器技术,Docker允许开发人员将应用程序和其依赖项打包到一个独立的、可移植的容器中。每个容器具有自己的文件系统、环境变量和资源隔离,从而使应用程序可以在…...

【团购核销】抖音生活服务商家应用快速接入①——基础工作

文章目录 一、前言二、抖音开放平台(服务商平台)三、认证服务能力四、第三方生活服务商家应用五、APPID和AppSecret六、申请接口权限七、开发配置八、参考 一、前言 目的:将抖音团购核销的功能集成到我们自己开发的App和小程序中 【团购核销】…...

MyBatis实践:提高持久化层数据处理效率

一、MyBatis简介: 1.简介:https://mybatis.org/mybatis-3/zh/index.html?spmwolai.workspace.0.0.66162306mX2SuC MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下&#xff…...

如何理解Lua 使用虚拟堆栈

虚拟堆栈的基本概念 Lua使用虚拟堆栈来实现Lua和C(或其他宿主语言)之间的交互。这个虚拟堆栈是一个数据结构,用于存储Lua的值,如数字、字符串、表、函数等。它在Lua状态机(lua_State)内部维护,为…...

UE5 腿部IK 解决方案 footplacement

UE5系列文章目录 文章目录 UE5系列文章目录前言一、FootPlacement 是什么?二、具体实现 前言 在Unreal Engine 5 (UE5) 中,腿部IK(Inverse Kinematics,逆向运动学)是一个重要的动画技术,用于实现角色脚部准…...

SMMU软件指南之概述

安全之安全(security)博客目录导读 目录 1. 概述 1.1 开始之前 2. SMMU 的功能 1. 概述 本博客描述了 ARM 系统内存管理单元(SMMUv3)的基本操作及其使用案例,包括: • SMMU 架构概念、术语和操作 • 与 SMMU 功能相关的系统级考虑因素 • 典型 SMMU 使用案例的知识 1…...

Vue_Router权限控制:不同角色显示不同路由

写在前面 在Vue中,Router是一个官方提供的用于处理应用程序路由的插件。它允许我们创建单页应用程序(SPA),其中不同的页面和组件可以通过URL进行导航和展示。使我们可以轻松地创SPA,并实现可复用和可组合的组件…...

机器学习4

九、线性回归 1、概念 假设存在多个点,需要使用一条线来保障尽量拟合这些点,寻找这条线的过程就叫回归。 机器学习中一种有监督学习的算法,回归问题主要关注的是因变量(需要预测的值)和一个或多个数值型的自变量(预测变量)之间的关系。 2、损失…...

Linux中系统的延迟任务及定时任务

一、延时任务 at 命令,即用即消 如 at 11:30 rm -rf /mnt/* ctrld运行 (过一秒即可执行) -v 使用较明显的时间格式,列出at调度中的任务列表 -l 可列出目前系统上面的所有该用户的at调度 -c 可以列出后面接…...

从Stream的 toList() 和 collect(Collectors.toList()) 方法看Java的不可变流

环境 JDK 21Windows 11 专业版IntelliJ IDEA 2024.1.6 背景 在使用Java的Stream的时候,常常会把流收集为List。 假设有List list1 如下: var list1 List.of("aaa", "bbbbbb", "cccc", "d", "eeeee&qu…...

centos7.9单机版安装K8s

1.安装docker [rootlocalhost ~]# hostnamectl set-hostname master [rootlocalhost ~]# bash [rootmaster ~]# mv /etc/yum.repos.d/* /home [rootmaster ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [rootmaster ~]# cu…...

Notepad++--在开头快速添加行号

原文网址:Notepad--在开头快速添加行号_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Notepad怎样在开头快速添加行号。 需求 原文件 想要的效果 方法 1.添加点号 Alt鼠标左键,从首行选中首列下拉,选中需要添加序号的所有行的首列&#xff…...

如何在 PyCharm 中配置 HTTP 代理以确保网络连接的顺畅性

如何在 PyCharm 中配置 HTTP 代理以确保网络连接的顺畅性 在配置 PyCharm 的 HTTP 代理以确保网络连接的顺畅性时,需按照一定的步骤进行设置,这不仅有助于确保 PyCharm 能够顺利访问互联网资源,还能保证插件和工具的正常更新与同步。以下是详…...

查找萤石云IOS Sdk中的编解码接口

2021/1/20 以前的时候,碰到的问题,想把萤石云视频介入到TRTC,但是... 萤石云的IOS接口中没有相应的解码播放库,也就是找不到PlayerSDK对应部分,怎么做呢? 一个是坐等萤石云开放这部分接口,可能…...

webpack配置

4-3vue-loader测试_哔哩哔哩_bilibili 一.新建文件夹vue_todo,vscode打开 二.ctrl打开终端,输入npm init -y,快速生成一个默认的package.json文件 之后左边出现项目初始化文件package.json 三.接下来需要webpack完成打包,所以安装…...

Streamlit + AI大模型API实现视频字幕提取

简介 在本文中,我将带你探讨如何使用Streamlit和AI大模型API来实现视频字幕提取的技术。Streamlit是一个开源的Python库,用于快速构建数据应用的Web界面,而AI大模型API,如OpenAI,提供了强大的语言处理能力&#xff0c…...

11.21 深度学习-tensor常见操作

import torch from PIL import Image from torchvision import transforms # 获取元素值 tensor.item() 返回一个数值 只能是tensor里面有一个数字的 # 我们可以把单个元素tensor转换为Python数值,这是非常常用的操作 # tensor 里面超过了1个数字就不行 def g…...

gitlab和jenkins连接

一:jenkins 配置 安装gitlab插件 生成密钥 id_rsa 要上传到jenkins,id_rsa.pub要上传到gitlab cat /root/.ssh/id_rsa 复制查看的内容 可以看到已经成功创建出来了对于gitlab的认证凭据 二:配置gitlab cat /root/.ssh/id_rsa.pub 复制查…...

从视频帧生成点云数据、使用PointNet++模型提取特征,并将特征保存下来的完整实现。

文件地址 https://github.com/yanx27/Pointnet_Pointnet2_pytorch?spm5176.28103460.0.0.21a95d27ollfze Pointnet_Pointnet2_pytorch\log\classification\pointnet2_ssg_wo_normals文件夹改名为Pointnet_Pointnet2_pytorch\log\classification\pointnet2_cls_ssg "E:…...

vue3 + Element Plus + ts 封装全局的 message、messageBox、notification 方法

本文示例将 Element Plus 中的 ElMessage 消息提示, ElMessageBox 消息弹出框, ElNotification 消息通知 方法统一封装到全局 hooks 文件中方便全局调用 准备:在项目 src 目录中新建 hooks 目录、然后在 hooks 目录中新建 index.ts (如果你没有使用 ts …...

【人工智能】Python在机器学习与人工智能中的应用

Python因其简洁易用、丰富的库支持以及强大的社区,被广泛应用于机器学习与人工智能(AI)领域。本教程通过实用的代码示例和讲解,带你从零开始掌握Python在机器学习与人工智能中的基本用法。 1. 机器学习与AI的Python生态系统 Pyth…...

linux上安装docker

在 Linux 上安装 Docker 是一个相对简单的过程。以下是针对 Debian 和其他基于 Debian 的发行版(如 Ubuntu)的详细步骤。如果您使用的是其他发行版(如 CentOS 或 Fedora),也可以参考相应的官方文档进行安装。 安装 Do…...

LeetCode:1008. 前序遍历构造二叉搜索树

目录 题目描述: 代码: 第一种: 第二种: 第三种:分治法 题目描述: 给定一个整数数组,它表示BST(即 二叉搜索树 )的 先序遍历 ,构造树并返回其根。 保证 对于给定的测试用例,总是有可能找到具有给定需求的二叉搜索树。 二叉搜索树 是一棵…...

开源远程桌面工具:RustDesk

在远程办公和远程学习日益普及的今天,我们经常需要远程访问办公电脑或帮助他人解决电脑问题。 市面上的远程控制软件要么收费昂贵,要么需要复杂的配置,更让人担心的是数据安全问题。 最近我发现了一款名为 RustDesk 的开源远程桌面工具&…...

nfs服务器--RHCE

一,简介 NFS(Network File System,网络文件系统)是FreeBSD支持的文件系统中的一种,它允许网络中的计 算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源,主要在unix系…...

使用 Elastic 3 步实现基于 OTel 的原生 K8s 和应用可观测性

作者:来自 Elastic Bahubali Shetti Elastic 的 OpenTelemetry 发行版现已支持 OTel Operator,可使用 EDOT SDK 自动检测应用程序,并管理 EDOT OTel Collector 的部署和生命周期以实现 Kubernetes 可观察性。了解如何通过 3 个简单步骤进行配…...

Vue3-小兔鲜项目出现问题及其解决方法(未写完)

基础操作 (1)使用create-vue搭建Vue3项目 要保证node -v 版本在16以上 (2)添加pinia到vue项目 npm init vuelatest npm i pinia //导入creatPiniaimport {createPinia} from pinia//执行方法得到实例const pinia createPinia()…...

【mysql】锁机制 - 3.意向锁

意向锁(Intension Lock) 是为了提高粗粒度锁性能而设置的一种预判机制,即在一个操作发起实际资源的锁申请行为之前,先对更粗力度的资源发起一个加锁意向声明。 为什么需要意向锁? 比如对于以下操作: 事务…...

Nuxt3 动态路由URL不更改的前提下参数更新,NuxtLink不刷新不跳转,生命周期无响应解决方案

Nuxt3 动态路由URL不更改的前提下参数更新,NuxtLink不刷新不跳转,生命周期无响应解决方案 首先说明一点,Nuxt3 的动态路由响应机制是根据 URL 是否更改,参数的更改并不会触发 Router 去更新页面,这在 Vue3 上同样存在…...

Spring Boot集成Redis:配置、序列化与持久化

Spring Boot集成Redis:配置、序列化与持久化 一、简介 什么是Redis Redis是一个开源的、基于内存的高性能键值对存储数据库,支持多种数据结构如字符串、哈希、列表、集合等。它以其卓越的性能、高可用性和持久性而广受欢迎。 为什么要使用Redis Red…...

JAVA:探索 PDF 文字提取的技术指南

1、简述 随着信息化的发展,PDF 文档成为了信息传播的重要媒介。在许多应用场景下,如数据迁移、内容分析和信息检索,我们需要从 PDF 文件中提取文字内容。JAVA提供了多种库来处理 PDF 文件,其中 PDFBox 和 iText 是最常用的两个。…...

当你项目服务器磁盘报警

当你们公司运维收到这样的邮件,大概率日志文件过大引起的 在Linux下如何不停止服务,清空nohup.out文件呢? nohup.out会一直一直自己增长下去,如果你的服务器硬盘不给力的话,很容易把应用也挂掉(硬盘没空间 &#xff0…...

SpringBoot中Maven的定义及国内源配置教程,实现自动获取Jar包

推荐一个国内镜像API网站,无需信用卡及科学上网即可调用gpt,claude3,gemini等国外模型,感兴趣的可以看下👉:https://api.atalk-ai.com/ SpringBoot中Maven的定义及国内源配置教程,实现自动获取J…...

LSTM 和 LSTMCell

1. LSTM 和 LSTMCell 的简介 LSTM (Long Short-Term Memory): 一种特殊的 RNN(循环神经网络),用于解决普通 RNN 中 梯度消失 或 梯度爆炸 的问题。能够捕获 长期依赖关系,适合处理序列数据(如自然语言、时间序列等&…...

【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)

【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter) 更新以gitee为准: 文章目录 数据预测概念和适用方式线性系统的适用性 数据预测算法和卡尔曼滤波公式推导状态空间方程和观测器先验估计后验估计…...

神经网络问题之一:梯度消失(Vanishing Gradient)

梯度消失(Vanishing Gradient)问题是深度神经网络训练中的一个关键问题,它主要发生在反向传播过程中,导致靠近输入层的权重更新变得非常缓慢甚至几乎停滞,严重影响网络的训练效果和性能。 图1 在深度神经网络中容易出现…...

【微软:多模态基础模型】(4)统一视觉模型

欢迎关注[【youcans的AGI学习笔记】](https://blog.csdn.net/youcans/category_12244543.html)原创作品 【微软:多模态基础模型】(1)从专家到通用助手 【微软:多模态基础模型】(2)视觉理解 【微…...

npm | Yarn | pnpm Node.js包管理器比较与安装

一、包管理器比较 参考原文链接: 2024 Node.js Package Manager 指南:npm、Yarn、pnpm 比较 — 2024 Node.js Package Manager Guide: npm, Yarn, pnpm Compared (nodesource.com) 以下是对 Node.js 的三个包管理工具 npm、Yarn 和 pnpm 的优缺点总结&am…...

建造者模式

什么是建造者模式? 建造者模式(Builder Pattern)是一种设计模式,用来一步步创建复杂的对象,而不用直接去调用复杂的构造函数或手动设置大量属性。 你可以: • 按步骤“搭建”对象。 • 自由选择要设置的部…...

Spring Boot核心概念:应用配置

Spring Boot提供了强大的配置系统,允许开发者通过配置文件轻松管理应用的配置。支持的主要配置文件格式有两种:application.properties和application.yml。 application.properties与application.yml application.properties和application.yml是Spring…...

linux环境安装cuda toolkit

1 全新安装 如果环境中没安装过cuda版本, 这种情况下比较简单。 直接在https://developer.nvidia.com/cuda-toolkit-archive选择对应版本下载安装即可。 如下为安装cuda toolkit 11.8. 2 环境中已经存在其他版本 这种情况下比较复杂一些。 首先要确认最高支持的版…...

WebSocket实战,后台修改订单状态,前台实现数据变更,提供前端和后端多种语言

案例场景: 在实际的后台中需要变更某个订单的状态,在官网中不刷新页面,可以自动更新状态 在前端页面实现订单状态的实时更新(不刷新页面),可以通过 WebSocket 的方式与后台保持通信,监听订单状态…...

实时通信协议概述:WebRTC、RTP/RTCP、RTMP、HLS 和 FLV 的比较与应用

文章目录 一、协议总览二、WebRTC2.1 时序图2.2 代码示例 三、RTP/RTCP3.1 时序图3.2 代码示例 四、RTMP4.1 时序图4.2 代码示例 五、HLS5.1 时序图5.2 代码示例 六、总结 一、协议总览 协议/格式细节对比适用场景用法WebRTC使用 UDP 传输协议,支持 P2P 通信&#…...

Vue路由

目录 1. 安装 vue-router 2. 创建 Vue 项目结构 3. 配置路由 4. 在 main.js 中使用路由 5. 在 App.vue 中添加 6. 创建组件 7. 运行你的应用 在 Vue.js 2 中,路由管理通常通过 vue-router 插件来实现。vue-router 是一个官方的路由管理器,允许你…...

uniapp开发微信小程序笔记3-全局配置、导航栏配置、tabBar配置

前言: 本文记录的是微信小程序的全局配置、导航栏配置、tabBar配置 一、全局配置: 可以直接查官方文档:pages.json 页面路由 | uni-app官网,有非常详细的文档说明 都是在 pages.json里面做配置的,我们可以看到已经有…...

Hash table类算法【leetcode】

哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素 那么哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里。 例如要查询一个名字是否在这所学校里。 要枚举的话时间复杂度是O(n),但如果使用哈希…...

多算法模型(BI-LSTM GRU Mamba ekan xgboost)实现功率预测

概述 本项目旨在通过结合多算法模型网络实现功率预测。包括数据处理、特征工程、模型训练、模型推理和结果输出,最终结果以 JSON 格式返回。 代码地址:代码...