mysql:列类型之string

79 篇文章 10 订阅
本文详细介绍了MySQL中各种字符串类型,包括char、varchar、text等,以及它们与字符集编码、排序规则的关系。同时,讨论了binary、blob等二进制类型,并提及在C#中的对应使用。强调了字符集对存储空间的影响和不同类型的存储细节,如char类型的空格处理。此外,还提到了不同类型的存储限制,如varchar类型的理论最大值与实际可用长度的区别。
摘要由CSDN通过智能技术生成

环境:

  • window10
  • vs2022
  • .net 6
  • mysql 8.0.25
  • DBeaver

参考:
《博文:mysql字符集编码和排序规则》
《博文:细说ASCII、GB2312/GBK/GB18030、Unicode、UTF-8/UTF-16/UTF-32编码》
《mysql:11.3 String Data Types》

在mysql中说string,一般说的是charvarchartinytexttextmediumtextlongtext
但是mysql文档中将binayvarbinarytinyblobblobmediumbloblongblob以及enumset也归到string一类了。也许是因为它们有相似吧。

其实,binary、blob是字节,而enum、set是整数,不知道为什么mysql文档中要把它们归为一类。

基础支持:字符集编码和排序规则:

涉及到字符串的地方就要涉及到两个注意点:字符集编码排序规则。它们一个影响存储的字节,一个影响不同字符间的排序。可参考:《博文:mysql字符集编码和排序规则》

1. char类型

char(M):M取值范围0-255,默认1,这里的M代表的是字符,即:这一列用的是ascii码,那么它最多占用255*1=255个byte,如果是utf8mb4,则最多占用255*4=1020个字节。

存储的细节:

  • 当mysql存储时,对于给定字符串不满足255个长度时,将在末尾补齐空格插入;
  • 当mysql取数据时,默认会自动剪除末尾的空格(也可以通过启用PAD_CHAR_TO_FULL_LENGTH模式,让mysql补齐空格后返回255个长度的字符串,但一般没人这么做);

2. varchar类型

varchar(M):M取值范围0-65535,注意:这里的M也是代表的字符,但65535只是它的理论最大值,实际值却达不到(还要受到mysql行大小的限制,65,535 bytes,which is shared among all columns)。

如:这一列用ascii和用utf8mb4是不一样的,如果用ascii那么可以存65535个字符,而M的最大值是65532,如果用utf8mb4的话实际可能只存65535/4=16383个字符,M的最大值也是16383,参照mysql文档的描述:
在这里插入图片描述

和char类型相比: varchar类型的末尾空格不会被自动剪除和补齐。

注意:sqlsever中对 char(M) 这种定长的字符串也会用右侧的空格补齐。
另外,mysql和sqlserver中均不会对varchar这种变长的字符串右侧补齐。

3. tinytext类型

最多存储255个字节,如果全存汉字,那么最多存储85个字符,如:“啊”,86个就报错。

4. text类型

最多存储65,535个字节,如果全存汉字,那么最多存储65535/3=21845个字符,如:“啊”,21846个就报错。

另外: 定义时,也可以使用 text(M)这种形式,不过mysql会根据M的给定值将它自动转换为其他类型,如:text(6) 被转换成 tinytext。(其他可用来转换的类型有 text、mediumtext、longtext)

5. mediumtext类型

最多存储16,777,215个字节,如果全存汉字,那么会存储16,777,215/3=5592405,如:“啊” 5592406个就报错。

6. longtext类型

最多存储4,294,967,295 or 4GB 字节,和mediumtext类似,存储空间大些。

7. binary、varbinary、tinyblob、blob、mediumblob、longblob类型

binary(M) 和 varbinary(M) 类似于char(M) 和 varchar(M) ,只不过前者存储的是字符串,后者存储字节。
其他的类型也与字符串的对应,如下表:
在这里插入图片描述

8. 在c#中的用法

对于char、varchar、text等类型自然使用c#中的string
对于binary、varbinay、blob等类型自然是用c#中的byte[]

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackletter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值