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(动态链接库)文件缺失的问题通常不可能通过单一的"一键修复"按钮来实现,因为DLL文件缺失可能由各种不同的原因导致,比如应用程序安装不正确、病毒感染、或系统文件损坏等。 使用内置的系统文件检查器&#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、路由,不影响网络访问
内网环境通常是有线的,通过服务器的ip、mac、dns地址访问网络才生效的,如果ip地址变了,就不能访问网络了。 如果你的ip地址变了,或者要防止ip变更影响网络访问,就要设置 1、依次点击右上角的电源-设置,在打…...
学习前端第三十七天(静态属性静态方法、类检查、错误处理)
一、静态属性和静态方法 1、静态属性静态方法 在属性和方法前加上static,创建属于类自己的属性和方法 class Person {// 加static,属于类自己的static name "xc"; // 类的name属性static height 183; // 类的height属性static age 20;…...
全网最全的基于电机控制的38类simulink仿真全家桶----新手大礼包
整理了基于电机的38种simulink仿真全家桶,包含多种资料,类型齐全十分适合新手学习使用。包括但是不局限于以下: 1、基于多电平逆变器的无刷直流电机驱动simulink仿真 2、基于负载转矩的感应电机速度控制simulink仿真 3、基于滑膜观测器的永…...
Python使用asyncio包实现异步编程
1. 异步编程 异步编程是一种编程范式,用于处理程序中需要等待异步操作完成后才能继续执行的情况。异步编程允许程序在执行耗时的操作时不被阻塞,而是在等待操作完成时继续执行其他任务。这对于处理诸如文件 I/O、网络请求、定时器等需要等待的操作非常有…...
获取文件夹下的vue文件形成组件,require.context
前言:项目中现有一个文件里面包含所有需要用到的组件,如果一个个的去import,则会非常麻烦,现有require.context去实现, 1、require.context var request require.context(‘./module’, true, /.js$/) require.cont…...
2024软件测试必问的常见面试题1000问!
01、您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答:有黑盒和白盒两种测试种类,黑盒有等价类划分法,边界分析法,因果图法和错误猜测法。白盒有逻辑覆盖法&…...
C++列表实现
文章目录 一、listView相关内容主要思想实例全部代码 二、QTreeView 一、listView 相关内容 QAbstractItemModel:一个抽象的类,为数据项模型提供抽象的接口,常见的的数据模型列如:QStringListModel,QStandardItemMode,QDirModel…...
论文合集整理推荐2024.5.15
2012年论文合集:论文入口 2019年论文合集:论文入口 2022年论文合集:论文入口 2023年论文合集:论文入口 2024年论文合集:论文入口...
JavaScript的跳转传参方式
在JavaScript中,页面跳转并传递参数通常可以通过几种不同的方式来实现。下面是一些常见的方法: 1.URL参数(Query String) 这是最常见的方式,通过在URL的末尾添加参数来实现。例如: javascriptwindow.loc…...
非阻塞模式下的读写操作
实现文件IO的非阻塞模式的读写操作 fcntl函数 功能: #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ ); // arg表示可变参数,由cmd决定 fcntl()对打开的文件描述符fd执行下面描述的操作之一。操作由cmd决…...
Google Ads谷歌广告账户被封停怎么办?
跨境出海业务少不了需要做Google Ads推广业务;其中让投手们闻风丧胆的消息就是帐户被暂停。当 Google 检测到任何违反其政策且可能损害用户在线体验的行为时,就会发生这种情况。那么如何在做广告推广的同时,保证账号不被封禁呢?看…...
AI大模型探索之路-训练篇23:ChatGLM3微调实战-基于P-Tuning V2技术的实践指南
系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…...
掌握核心概念:Java高级面试难题精解(一)
Java 高级面试问题及答案 问题1: 在Java中,什么是泛型擦除?为什么需要它? 答案: 泛型擦除是Java编译器的一个特性,它在运行时移除泛型类型信息,以确保类型安全。Java的泛型是在J2SE 1.5中引入的ÿ…...
Nagle算法
Nagle算法简介 Nagle算法主要是避免发送小的数据包,要求TCP连接上最多只能有一个未被确认的小分组,在该分组的确认到达之前不能发送其他的小分组。 在默认的情况下,Nagle算法是默认开启的,Nagle算法比较适用于发送方发送大批量的小数据&…...
MPLS小实验
实验图: 实验要求: 要求使用MPLS技术,将实验通,并在实验结束后使用命令:tracert -v -a 看是否基于标签进行转发。 如上:在每台路由器上都有两个环回,一个用于模拟用户网段,一个用于M…...
如何高效构建智能投资助手:韭菜盒子VSCode插件的7大核心功能深度解析
如何高效构建智能投资助手:韭菜盒子VSCode插件的7大核心功能深度解析 【免费下载链接】leek-fund :chart_with_upwards_trend: 韭菜盒子VSCode插件,可以看股票、基金、期货等实时数据。 LeekFund turns your VS Code and Cursor into a real-time stock,…...
工业软件与高性能算力融合:重构智能制造核心引擎
在制造业数字化转型向纵深推进的今天,工业软件与高性能算力的深度融合,正在成为驱动高端制造、关键装备、核心工业领域突破瓶颈的关键力量。长期以来,我国工业领域面临着研发周期长、仿真效率低、系统集成复杂、国产化替代缓慢等多重难题&…...
H5GG iOS模组引擎:基于JavaScript的iOS应用内存操作与界面定制技术实现
H5GG iOS模组引擎:基于JavaScript的iOS应用内存操作与界面定制技术实现 【免费下载链接】H5GG an iOS Mod Engine with JavaScript APIs & Html5 UI 项目地址: https://gitcode.com/gh_mirrors/h5/H5GG H5GG是一款创新的iOS模组引擎,通过Java…...
PyCharm里import报错?别急着pip install,先检查这个Python解释器配置
PyCharm中import报错的终极排查指南:从解释器配置到环境隔离 当你满心欢喜地在PyCharm中敲下import requests准备大展身手时,突然出现的红色波浪线就像一盆冷水浇下来。大多数人的第一反应是打开终端输入pip install requests——但等等,这真…...
告别Hello World:用Scala REPL在Ubuntu上实战计算级数,附完整代码与权限避坑
从Hello World到实战:用Scala REPL在Ubuntu上高效计算级数 当Java开发者第一次接触Scala时,往往会被其函数式编程范式和简洁语法所吸引。但真正要将其应用于实际问题解决时,却常因环境配置和实战经验不足而却步。本文将带你跳过传统语法学习阶…...
如何5分钟完成浏览器脚本安装:免费网盘直链解析工具终极指南
如何5分钟完成浏览器脚本安装:免费网盘直链解析工具终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 …...
信步SV1a-13714P嵌入式主板拆解:工业边缘计算硬件选型与实战部署指南
1. 项目概述:一块嵌入式主板的深度拆解最近在整理一个工业边缘计算的项目资料,翻出了几块之前用过的“信步科技SV1a-13714P”嵌入式主板。这块板子虽然不是什么新潮的玩意儿,但在特定的工业场景里,它就像一颗“定心丸”࿰…...
独立开发者如何借助Taotoken多模型能力优化个人项目成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何借助Taotoken多模型能力优化个人项目成本 对于独立开发者和小型项目而言,在探索大模型应用时࿰…...
别再只刷固件了!深入Proxmark3硬件层:AT91SAM7S512芯片与Bootrom.bin的救砖原理详解
深入Proxmark3硬件层:AT91SAM7S512芯片与Bootrom.bin的救砖原理详解 当你的Proxmark3设备突然"四灯全亮",USB连接失效,变成一块"砖头"时,大多数教程只会告诉你"短接测试点,用J-Link烧录bootr…...
如何快速掌握unnpk:网易游戏资源解包的完整入门指南
如何快速掌握unnpk:网易游戏资源解包的完整入门指南 【免费下载链接】unnpk 解包网易游戏NeoX引擎NPK文件,如阴阳师、魔法禁书目录。 项目地址: https://gitcode.com/gh_mirrors/un/unnpk 你是否曾经好奇过网易游戏《阴阳师》中那些精美的角色立绘…...
