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

mysql中utf8字符集中文字节长度统计如何统计到2个字节一个汉字

在 MySQL 的 utf8 字符集中(也被称为 utf8mb3),中文字符实际上并不是用2个字节来表示的,而是使用3个字节。这是 UTF-8 编码的一个特性,它使用1到4个字节来表示一个字符,具体取决于字符的 Unicode 码点。

对于中文字符,大部分位于 Unicode 的基本多文种平面(BMP)内,这些字符在 UTF-8 编码中通常使用3个字节。

如果你想要统计某个字段中中文字符的数量,但希望按照每个中文字符占用2个字节来计算(尽管这在 utf8 字符集中是不准确的),你将需要使用一些特殊的 SQL 函数和逻辑。但是,由于 SQL 本身并不直接支持这样的统计,你可能需要编写一些额外的代码或逻辑来实现这一点。

然而,如果你只是想要计算字符串的长度(以字符为单位,而不是字节),你可以使用 CHAR_LENGTH() 或 LENGTH(column_name) COLLATE utf8_general_ci(对于区分大小写的比较)函数。这些函数会返回字符串中的字符数,而不是字节数。

如果你确实需要按照每个中文字符占用2个字节的假设来进行统计(尽管这不准确),你可能需要在应用层面进行这样的计算,而不是在 SQL 查询中。例如,你可以使用某种编程语言来读取数据库中的字符串,然后遍历每个字符,检查它是否是一个中文字符,并根据你的假设来计算总字节数

但请注意,这种方法并不准确,因为它没有考虑到 UTF-8 编码的实际字节使用情况。在大多数情况下,最好直接使用 UTF-8 编码的实际字节长度,或者使用 utf8mb4 字符集来支持所有 Unicode 字符。

在MySQL中,直接使用SQL语句来按照“中文两个字节”的假设来计算字符串长度是不可能的,因为MySQL的内置函数如LENGTH()和CHAR_LENGTH()都是基于实际的字节长度和字符数量来计算的。但是,你可以使用存储过程或自定义函数来模拟这个逻辑。

不过,由于MySQL本身不支持在SQL层面直接处理字符的Unicode范围来区分中文字符和其他字符,所以我们需要一种近似的方法。以下是一个简化的方法,它使用MySQL的字符串函数来尝试区分中文字符(注意这种方法并不完美,因为中文字符的范围在Unicode中更为复杂):

使用REGEXP_REPLACE函数(在MySQL 8.0及以上版本中可用)来替换所有中文字符为一个占位符(比如#),每个中文字符替换为一个占位符。

计算替换后的字符串长度,并减去原始字符串中非中文字符的长度,得到的中文字符数量乘以2(按照你的假设)。

将上一步得到的结果加上原始字符串中非中文字符的长度(每个字符按1个字节计算)。

但是,由于MySQL的REGEXP_REPLACE函数不支持直接计算替换的次数,我们需要一种变通的方法。以下是一个简化的示例,它可能无法完全准确地按照你的假设来计算长度,但可以作为一个起点:

sql

DELIMITER //

CREATE FUNCTION CalculateLengthAssumingChinese2Bytes(input_str VARCHAR(255))

RETURNS INT

BEGIN

    DECLARE chinese_chars_replaced INT DEFAULT 0;

    DECLARE non_chinese_length INT;

    DECLARE result_length INT;

    -- 假设这里我们只替换常见的中文字符范围(并不完整)

    SET @replaced_str = REGEXP_REPLACE(input_str, '[\x{4e00}-\x{9fa5}]', '#', 1, 0, 'c');

    -- 这里我们只是简单地通过比较长度来估算被替换的中文字符数量

    -- 注意:这并不准确,因为有些非中文字符也可能被意外替换

    SET chinese_chars_replaced = CHAR_LENGTH(input_str) - CHAR_LENGTH(@replaced_str);

   

    -- 计算非中文字符的长度(按1个字节计算)

    SET non_chinese_length = LENGTH(input_str) - (chinese_chars_replaced * 3); -- 假设中文字符原本占3个字节

    

    -- 计算结果长度(按照中文两个字节的假设)

    SET result_length = (chinese_chars_replaced * 2) + non_chinese_length;

    

    RETURN result_length;

END //

DELIMITER ;

 

 

注意:

 

这个函数只是一个简化的示例,它可能无法准确地处理所有情况。

中文字符的Unicode范围比[\x{4e00}-\x{9fa5}]要广泛得多,这个范围只包含了常用的中文字符。

在实际应用中,你可能需要根据你的具体需求来调整这个函数。

如果你的MySQL版本不支持REGEXP_REPLACE函数,你将需要使用其他方法或升级到支持该函数的版本。

 

相关文章:

mysql中utf8字符集中文字节长度统计如何统计到2个字节一个汉字

在 MySQL 的 utf8 字符集中(也被称为 utf8mb3),中文字符实际上并不是用2个字节来表示的,而是使用3个字节。这是 UTF-8 编码的一个特性,它使用1到4个字节来表示一个字符,具体取决于字符的 Unicode 码点。 对…...

如何实现Linux双网卡同时连接内网和外网的配置?

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …...

ASCLL码表以及字符的相加减

ASCLL码表完整版及解释_acssll码-CSDN博客 #include <getopt.h> #include <stdio.h> #include <stdlib.h>#define MAX_PATH 256 char filename[MAX_PATH 5];int isdigit(int c) {if (c > 0 && c < 9)return 1;return 0; }int main(int argc…...

一键修复所有dll缺失,教大家解决丢失的dll文件

修复所有DLL&#xff08;动态链接库&#xff09;文件缺失的问题通常不可能通过单一的"一键修复"按钮来实现&#xff0c;因为DLL文件缺失可能由各种不同的原因导致&#xff0c;比如应用程序安装不正确、病毒感染、或系统文件损坏等。 使用内置的系统文件检查器&#x…...

wsl2安装rancher并导入和创建k8s集群

环境准备 安装wsl2点击此文]ubuntu20.04安装docker 点击此文,安装完成后docker镜像仓库改成阿里云镜像加速地址.如果不熟请点击此文 docker 安装rancher 启动wsl,根据官方文档以root身份执行 sudo docker run -d --restartunless-stopped -p 80:80 -p 443:443 --privileged …...

内网环境ubuntu设置静态ip、DNS、路由,不影响网络访问

内网环境通常是有线的&#xff0c;通过服务器的ip、mac、dns地址访问网络才生效的&#xff0c;如果ip地址变了&#xff0c;就不能访问网络了。 如果你的ip地址变了&#xff0c;或者要防止ip变更影响网络访问&#xff0c;就要设置 1、依次点击右上角的电源-设置&#xff0c;在打…...

学习前端第三十七天(静态属性静态方法、类检查、错误处理)

一、静态属性和静态方法 1、静态属性静态方法 在属性和方法前加上static&#xff0c;创建属于类自己的属性和方法 class Person {// 加static&#xff0c;属于类自己的static name "xc"; // 类的name属性static height 183; // 类的height属性static age 20;…...

全网最全的基于电机控制的38类simulink仿真全家桶----新手大礼包

整理了基于电机的38种simulink仿真全家桶&#xff0c;包含多种资料&#xff0c;类型齐全十分适合新手学习使用。包括但是不局限于以下&#xff1a; 1、基于多电平逆变器的无刷直流电机驱动simulink仿真 2、基于负载转矩的感应电机速度控制simulink仿真 3、基于滑膜观测器的永…...

Python使用asyncio包实现异步编程

1. 异步编程 异步编程是一种编程范式&#xff0c;用于处理程序中需要等待异步操作完成后才能继续执行的情况。异步编程允许程序在执行耗时的操作时不被阻塞&#xff0c;而是在等待操作完成时继续执行其他任务。这对于处理诸如文件 I/O、网络请求、定时器等需要等待的操作非常有…...

获取文件夹下的vue文件形成组件,require.context

前言&#xff1a;项目中现有一个文件里面包含所有需要用到的组件&#xff0c;如果一个个的去import&#xff0c;则会非常麻烦&#xff0c;现有require.context去实现&#xff0c; 1、require.context var request require.context(‘./module’, true, /.js$/) require.cont…...

2024软件测试必问的常见面试题1000问!

01、您所熟悉的测试用例设计方法都有哪些&#xff1f;请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答&#xff1a;有黑盒和白盒两种测试种类&#xff0c;黑盒有等价类划分法&#xff0c;边界分析法&#xff0c;因果图法和错误猜测法。白盒有逻辑覆盖法&…...

C++列表实现

文章目录 一、listView相关内容主要思想实例全部代码 二、QTreeView 一、listView 相关内容 QAbstractItemModel&#xff1a;一个抽象的类&#xff0c;为数据项模型提供抽象的接口&#xff0c;常见的的数据模型列如&#xff1a;QStringListModel,QStandardItemMode,QDirModel…...

论文合集整理推荐2024.5.15

‍2012年论文合集&#xff1a;论文入口 ‍2019年论文合集&#xff1a;论文入口 2022年论文合集&#xff1a;论文入口 2023年论文合集&#xff1a;论文入口 2024年论文合集&#xff1a;论文入口...

JavaScript的跳转传参方式

在JavaScript中&#xff0c;页面跳转并传递参数通常可以通过几种不同的方式来实现。下面是一些常见的方法&#xff1a; 1.URL参数&#xff08;Query String&#xff09; 这是最常见的方式&#xff0c;通过在URL的末尾添加参数来实现。例如&#xff1a; javascriptwindow.loc…...

非阻塞模式下的读写操作

实现文件IO的非阻塞模式的读写操作 fcntl函数 功能&#xff1a; #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ ); // arg表示可变参数&#xff0c;由cmd决定 fcntl()对打开的文件描述符fd执行下面描述的操作之一。操作由cmd决…...

Google Ads谷歌广告账户被封停怎么办?

跨境出海业务少不了需要做Google Ads推广业务&#xff1b;其中让投手们闻风丧胆的消息就是帐户被暂停。当 Google 检测到任何违反其政策且可能损害用户在线体验的行为时&#xff0c;就会发生这种情况。那么如何在做广告推广的同时&#xff0c;保证账号不被封禁呢&#xff1f;看…...

AI大模型探索之路-训练篇23:ChatGLM3微调实战-基于P-Tuning V2技术的实践指南

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…...

掌握核心概念:Java高级面试难题精解(一)

Java 高级面试问题及答案 问题1: 在Java中&#xff0c;什么是泛型擦除&#xff1f;为什么需要它&#xff1f; 答案&#xff1a; 泛型擦除是Java编译器的一个特性&#xff0c;它在运行时移除泛型类型信息&#xff0c;以确保类型安全。Java的泛型是在J2SE 1.5中引入的&#xff…...

Nagle算法

Nagle算法简介 Nagle算法主要是避免发送小的数据包&#xff0c;要求TCP连接上最多只能有一个未被确认的小分组&#xff0c;在该分组的确认到达之前不能发送其他的小分组。 在默认的情况下,Nagle算法是默认开启的&#xff0c;Nagle算法比较适用于发送方发送大批量的小数据&…...

MPLS小实验

实验图&#xff1a; 实验要求&#xff1a; 要求使用MPLS技术&#xff0c;将实验通&#xff0c;并在实验结束后使用命令&#xff1a;tracert -v -a 看是否基于标签进行转发。 如上&#xff1a;在每台路由器上都有两个环回&#xff0c;一个用于模拟用户网段&#xff0c;一个用于M…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...