字符串的字符数的含义

字符、字符串、字符数组、字符串指针变量 字符和字符串的区别 字符 如下,定义char,每一个字符一般情况下占用8个字节。 char c, ch; 字符串 例如"helloworld"; 注意' '和" "的区别,后者为常量字符串 在C++中,有两种类型的字符串表示形式: C-风格字符串 C++引入的string类 C-风格字符串 C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。字符串实际上是使用null字符'\... 阅读详情

字符串的字符数的含义

  • 一个英文字母的字符数为1
  • 一个中文汉字的字符数也为1
  • 一个数字的字符数也为1

例如:字符串类型 CHAR(n) 和 VARCHAR(n)

常用的字符串类型的数据类型有 CHAR 和 VARCHAR 两种,两者后面都需要跟上一个数字表示长度,例如

CHAR(10)
VARCHAR(10)
CHAR(n) 和 VARCHAR(n) 两者中的 n 含义均为该字段最大可容纳的字符数。(注意早期的版本中,n指的是字节数,你也不需要关注是哪些版本,因为是十多年前的版本了,估计一般人也用不到)。
占用空间
CHAR(n) 和 VARCHAR(n) 字段值的占用空间不是固定的,而是由实际存入的内容决定的,但在细节上两者有一些不同。我们均以 n=4 为例。

CHAR类型

对于 CHAR(4) 表示固定容纳4个字符,当少于4个字符时,会使用空格填充空缺的部分,使其达到4个字符。如果超过4个字符,会自动截断超出部分。例如你存入数据为 ‘ab’ ,实际会存入 'ab ’ (ab后有2个空格),因此占用4个字节。以下以几个案例作为演示:
(1) ‘a啊b’ —— 字符数为3,少1个用空格补齐,因此实际存入 'a啊b ’ ,字符数:4,字节数:1+3+1+1=6
(2)‘a啊b哈ccccccccc’ —— 字符数超出4,仅保留前4个字符,因此实际存入 ‘a啊b哈’ ,字符数:4,字节数:1+3+1+3=8
(3)‘a啊和哈’ —— 字符数刚好为4,不需要截断和补齐,因此实际存入 ‘a啊和哈’ ,字符数:4,字节数:1+3+3+3=10

对于 CHAR 字段,你在使用 CHAR_LENGTH() 和 LENGTH() 函数查询时,会发现和以上描述的情况不一致,我们放上代码演示:
(备注: CHAR_LENGTH() 函数返回字符串的字符数, LENGTH() 函数返回字符串的字节数)
– 假定已存在表 tb ,其中包含字段 s_char 的数据类型定义为 CHAR(4) ,我们先进行插入操作,获取插入行id=1
INSERT INTO tb(s_char) VALUES (‘啊a’); – 接下去查询该行 SELECT s_char, CHAR_LENGTH(s_char), LENGTH(s_char) FROM tb WHERE id=1;
– 结果为:s_char=>‘啊a’,CHAR_LENGTH(s_char)=>2,LENGTH(s_char)=>4
你会发现以上结果跟预想中的不一致,按照一般理解预期存入 ‘啊a’ ,仅为2个字符,需补充2个空格,实际存入为 '啊a ’ ,因此字符数为4,字节数为 3+1+1+1=6 。
这里造成偏差的原因并不是错误,而是 CHAR 字段在检索输出时,自动省略了右侧的空格。我们来演示一遍完整的流程:
预期存入 ‘啊a’ ,少于4个字符,补充2个空格,因此实际存入的值为 '啊a ’ ,该值字符数为4,字节数为6。在检索时,原值为 '啊a ’ ,输出时自动省略右侧空格,实际输出为 ‘啊a’ ,该字符串字符数为2,字节数为4。

VARCHAR 类型

下面再来说说 VARCHAR 类型,依然以 n=4 为例。区别于 CHAR 类型的补空, VARCHAR 类型对于未达到 n 字符的情况不会补空。
关于计算 VARCHAR 类型字符串的占用空间,有一点需要说明的是, VARCHAR 类型字符串的占用空间实际上包含2部分,一是存储数据本身占用的空间,二是描述数据的元数据占用的空间,例如 VARCHAR 类型会使用1个字节记录存入数据实际的字符数。下述描述的“占用空间”特指前者,即存储数据本身占用的空间,不包含描述数据的元数据占用的空间。(其他数据类型等同)
以下以几个案例作为演示:
(1) ‘a啊b’ —— 字符数为3,不补空,实际存入为 ‘a啊b’ ,字符数为3,字节数为 1+3+1=5 。
(2)‘a啊b哈ccccccccc’ —— 字符数超出4,仅保留前4个字符,因此实际存入 ‘a啊b哈’ ,字符数:4,字节数:1+3+1+3=8 。这种情况和 CHAR 类型处理一致。
(3)‘a啊和哈’ —— 字符数刚好为4,不需要截断和补齐,因此实际存入 ‘a啊和哈’ ,字符数:4,字节数:1+3+3+3=10

转发自:一文搞懂MySQL的数据类型中长度的含义

字符数组与字符串及其区别 字符数组的定义:是利用char定义的数组。比如arr[10]; 字符串的的定义:是用 ""包括的字符序列,字符串的末尾有一个隐含的'\0' 字符数组在某种特定情况下会成为字符串: 判断字符数组是否为字符串:就看字符数组是否有'\0' ,有'\0'就是字符串,否则不是 比如: char str1[10] = { 'a','b','c','d','e','f','g','h','i','j' };//字符数组,不是字符串 char str2[10] = { 'a',... 阅读详情

相关推荐

Twincat Scopeview录波中的Ringbuffer设置技巧与常见问题解决

本文深入解析了倍福Twincat Scopeview录波功能中Ringbuffer(环形缓冲区)的核心设置技巧与常见问题解决方案。针对数据丢失、触发时机不准等痛点,详细阐述了缓冲区大小、预触发样本、采样率等关键参数的优化配置,并提供了多通道同步、自动诊断等实战应用指南,帮助工程师高效捕捉和分析PLC数据。

rainy的博客 846

数据类型总结——String(字符串类型)

相关文章   简书原文:https://www.jianshu.com/p/546a755c3eb6   数据类型总结——概述:https://www.cnblogs.com/shcrk/p/9266015.html   数据类型总结——String(字符串类型):https://www.cnblogs.com/shcrk/p/9277107.html   数据类型总结——Number(数...

weixin_30656145的博客 399

告别OpenAI API调用:手把手在本地CPU/GPU上部署fast-whisper中文语音识别模型

本文详细指导如何在本地CPU/GPU上部署fast-whisper中文语音识别模型,摆脱对OpenAI API的依赖。从环境准备、模型获取与优化,到CPU/GPU环境的具体部署步骤和性能优化技巧,全面覆盖本地化语音识别的实现方案,帮助开发者提升效率并保障数据隐私。

weixin_29988907的博客 307

【c语言】从0到1带你更细致的理解字符串

详细的字符串+转义字符+ASCII码表

笨笨的学习博客 640

OLED的字模提取(保姆级)---基于PCtoLCD2013

做为一个刚刚开始接触编程不久的白菜,这个OLED想做一个信息显示,可是商家给我的例程里就是88,816两种字体的格式,我的屏幕是0.91寸的8*16的字体显示上感觉特别丢丢儿小,我就想整个大的,哎,只怪直接学习习惯不好,总是学一半,绕了好大一圈,才搞好,想写一篇博客,时刻提醒踏实学习,第一次写博客,小白一枚,勿喷。。 OLED屏幕驱动程序功能 我们对Markdown编辑器进行了一些功能拓展与语法支...

qq_44886611的博客 7781

vscode+keil嵌入式软件开发全流程

vscode+keil嵌入式软件开发全流程

AspringQ的博客 6784

计算字符串中字符个数

笔记

m0_65156387的博客 4671

Halcon实战:5分钟搞定自定义直线卡尺工具(附完整代码下载)

本文详细介绍了如何使用Halcon快速开发自定义直线卡尺工具,通过交互式ROI绘制、边缘检测和直线拟合三个核心函数,实现高效工业视觉检测。文章包含完整代码下载,帮助开发者在5分钟内掌握这一实用工具的开发技巧,提升直线检测的精度和效率。

perl8的博客 251

统计字符串中各类字符的个数

统计字符串中各类字符的个数 一、题目描述   从键盘输入一行字符串,统计其中的大写字母、小写字母、空格、数字、和其他字符的个数。(更好的阅读体验,请浏览统计字符串中各类字符的个数) 二、分析解答   本题主要考察C语言字符串的相关知识点。字符串处理是C语言中很重要的一个知识点,但在C语言汇总并没有字符串类型,因此,只能采用字符数组或者字符指针的形式来使用字符串。要记住一点,不论我们使用的是字符串常量还是字...

IT之旅 的博客 2万+

华为OD机试真题 新系统2026-04-01 C语言 实现【空间占用计算】

员工A的磁盘空间经常被耗尽,他需要找到占用空间最大的目录或文件,然后决定如何清理文件释放空间。给定某一目录,请编写程序帮助他统计该目录内一级子目录和文件的占用空间,并返回目标目录一级子项(文件或子目录)中占用空间最大的项。

MISAYAONE的博客 231

微信小程序 - 详细实现可移动悬浮按钮,全屏悬浮元素图标可拖动拖拽并自动吸附边缘,微信小程序实现悬浮球吸附边缘+计算靠边靠拢效果(详细代码,拖拽中途放手,靠左就自动跑到屏幕左侧,反之靠右跑到屏幕右侧)

微信小程序,vue2,vue3,微信小程序悬浮功能小按钮,自动吸附边缘效果,微信小程序之可拖动悬浮按钮的实现,如何实现靠近边缘自动吸住功能,小程序右下角的悬浮效果,实现可拖动悬浮图标,自动向两边靠拢,悬浮按钮的实现,微信小程序悬浮球效果,微信小程序(可拖动悬浮按钮)当靠近屏幕边缘时会磁吸靠近,如何实现全局悬浮按钮,悬浮球判断吸附在左右,全屏悬浮能拖着走,小程序怎么做悬浮图标靠近左右两侧能吸附住,悬浮菜单按钮,悬浮球可拖拽,全局悬浮球,全局悬浮框,实现悬浮按钮可拖动,自动吸附边缘效果,若按钮此时位于页面中间偏

🏆 前端领域优质创作者 1万+

C语言学习——字符数组与字符串

字符数组是特殊的整数有序集合每一个整数占用一个字节(范围为:-128 — 127)可以用字符字面量对数组元素进行初始化或者赋值字符数组常常用来存储可阅读的文本信息。

2301_80366509的博客 1485

uni-app - 将 base64 图片编码转为 Blob 本地文件路径(把base64类型的图片,转换成blob二进制文件流)适用于 uni-app / vue.js / JavaScript

uni-app/vue.js/JavaScript将base64转Blob,uniappapp端如何将图片的base64编码转换成File对象或Blob,uni-app/vue.js/JavaScript中拿到base64转blob对象,uniapp图片base64格式转blob格式方法,uniapp上传图片压缩转base64码与base64转图片路径,Base64/Blob/File图片文件转换,url、base64、blob相互转换方法,读取本地文件为Base64并转成B

🏆 前端领域优质创作者 1万+

字符 字符串 字符数组 字符串指针 指针数组(C语言)

  一、字符指针、字符数组   1. 字符指针:字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。   char *ps="C Language"; 顺序是:1.分配内存给字符指针;2.分配内存给字符串;3.将字符串...

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 4985

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

字符数组与字符串(上)

没有专用的字符串类型(字符串:双引号括起来的有序字符集)- ‘0’与‘\0’不同,表示一个非0值,对应的整数为48。-整数0即字符串中的0元素(char是最小的整数)-每个整数占用一个字节(-128--127)-当字符数组中存在0元素时,可当作字符串使用。-字符数组中的0元素表示了一个字符串的结束。- 存在字符串字面量,但仅能作为常量使用。-0元素对应的字符为‘\0’(转义字符)- 字符数组的元素,不一定是字符串的元素。-一个字符数组不一定是一个字符串。而一个字符串一定是一个字符数组。

yxs277的博客 400

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【C++】字符数组基本概念及字符串处理函数

定义数组再分别运用下标赋值定义数组同时用大括号赋值如果花括号中提供的初值个数大于数组长度,语法错误如果花括号中提供的初值个数小于数组长度,字符赋给数组中前面的那些元素,其余元素自动定位空字符(’\0’),如果花括号中提供的初值个数等于预定数组长度,定义时可以省略数组长度,数组根据初值个数确定数组长度数组c长度自动定位3定义二维数组{用字符串常量初始化字符数组"abc" };//可以省略大括号,效果同上。

PuddleRubbish的博客 3144

c语言字符数组应用程序,C语言字符数组的应用及程序.doc

C语言字符数组的应用及程序C语言字符数组的应用及程序C语言字符数组的应用用来存放字符量的数组称为字符数组。7.1.1字符数组的定义形式与前面介绍的数值数组相同。例如:char c[10];由于字符型和整型通用,也可以定义为int c[10]但这时每个数组元素占2个字节的内存单元。字符数组也可以是二维或多维数组。例如:char c[5][10];即为二维字符数组。7.1.2字符数组的初始化字符数组也...

weixin_39585795的博客 252

二维数组·字符数组·与字符串

二维数组 一般形式 类型名 数组名 [常量表达式1][常量表达式2]; int a[3][4] 第一列 第二列 第三列 第四列 第0行 a[0][0] a[0][1] a[0][2] a[0][3] 第1行 a[1][0] ...

yj 2296

0710 一维字符数组和字符串函数族的函数的使用

本文系统整理了C语言中字符数组与字符串处理的核心知识点,包括:1) 一维字符数组的定义、初始化(完全/不完全/不定长)及字符串处理逻辑('\0'的作用);2) 字符串输入输出函数(gets/puts)和关键字符串函数(strlen/strcpy/strcat/strcmp)的实现原理及自定义实现;3) 二维数组的定义与初始化方法;4) 实用案例:二维数组最大值定位、十进制转二进制、单词计数、字符串逆置等。通过代码示例演示了各功能的实现过程,突出了'\0'在字符串处理中的关键作用。

2302_77781847的博客 606

字符数组和字符串

1.字符数组和字符串的定义 字符数组 :字符数组是由char类型定义的数组 字符串:是由" "包括起来的字符序列 字符串的结束标志是'\0' 2.如何区分字符数组和字符串 eg; char str1[10] = { 'a','b','c','d','e','f','g','h','i','j' };//字符数组,不是字符串原因: 是由char 类型定义的数组, 但容量为10 ,没有'\0'的位置 char str2[10] = { 'a','b','c','d','e','f','g','...

ClidOvO的博客 7147

字符串与字符数组

C 语言知识点——字符串与字符数组

Snow_Dragon_L的博客 3186

C语言中字符串和字符数组的区别

C语言中字符串和字符数组的区别1、基本概念2、代码分析3、总结 1、基本概念 字符串和字符数组很相似,但是有本质上的区别。 (1) C语言中,字符串是双引号括起来的单个或多个字符的集合,编译器自动在结尾加上’\0’字符。字符串常量存储在只读数据段,无法通过指针进行修改字符串中的某个字符。 (2)C语言中,不能定义字符串(没有string关键字,只要C++才有),但是在C语言中使用字符串,通常会用字符数组来模拟字符串,必须是’\0’结尾的字符数组,这个字符数组存储通常会分配在栈区,可以被称为字符串,且该字符串

我是你的峰哥哥啊的博客 8405

字符数组和字符串的区别

字符数组和字符串在 C 语言中的概念有一些重要的区别,尤其是在内存分配和处理方式上。下面我将分别解释它们的定义、区别和用法。

smliewhale的博客 1974
上一篇: 前端下载文件实现方式及跨域下载方法
下一篇: vue表单定义校验规则;表单属性校验不通过时开启拦截提醒,并拦截表单提交。
JCjunior
博客等级 码龄11年 45粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值