VARCHAR 详解[通俗易懂]

VARCHAR 详解[通俗易懂]varchar(20):20指的是表中的a字段能存储的最大字符个数Incontrastto CHAR, VARCHAR valuesarestoredasa

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

varchar(20):20指的是表中的a字段能存储的最大字符个数

In contrast to CHARVARCHAR values are stored as a 1-byte or 2-byte length prefix plus data.

The length prefix indicates the number of bytes in the value.

A column uses one length byte if values require no more than 255 bytes,

two length bytes if values may require more than 255 bytes.


mysql> create table t1( a varchar(20)); Query OK, 0 rows affected (0.27 sec)

 

mysql> show create table t1;
+-------+---------------------------------------------------------------
| Table | Create Table
+-------+---------------------------------------------------------------
| t1    | CREATE TABLE `t1` (
  `a` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+---------------------------------------------------------------
1 row in set (0.00 sec)
mysql> insert into t1 select repeat("a",21);
ERROR 1406 (22001): Data too long for column 'a' at row 1
mysql> insert into t1 select repeat("a",20);
Query OK, 1 row affected (0.09 sec)
Records: 1 Duplicates: 0 Warnings: 0

 

mysql> insert into t1 select repeat("",21);
ERROR 1406 (22001): Data too long for column 'a' at row 1

 

mysql> insert into t1 select repeat("",20);
Query OK, 1 row affected (0.11 sec)
Records: 1 Duplicates: 0 Warnings: 0

 

mysql> insert into t1 select "我我我我我我我我我我我我我我我我我我我1";
Query OK, 1 row affected (0.09 sec)
Records: 1 Duplicates: 0 Warnings: 0

 

mysql> insert into t1 select "我我我我我我我我我我我我我我我我我我我11";
ERROR 1406 (22001): Data too long for column 'a' at row 1

 

varchar 存储极限:

表为utf8字符集:

mysql> show create table a;
+-------+-------------------------------------------------------------------------------------------+
| Table | Create Table                                                                              |
+-------+-------------------------------------------------------------------------------------------+
| a     | CREATE TABLE `a` (
  `a` varchar(21844) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

 

mysql> create table a( a varchar(65535));
ERROR 1074 (42000): Column length too big for column 'a' (max = 21845); use BLOB or TEXT instead
mysql
> create table a( a varchar(65532)); ERROR 1074 (42000): Column length too big for column 'a' (max = 21845); use BLOB or TEXT instead
mysql
> create table a( a varchar(21845)); ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes st eck the manual. You have to change some columns to TEXT or BLOBs
mysql
> create table a( a varchar(21844)); Query OK, 0 rows affected (0.31 sec)

 

表为latin1字符集:

mysql> create table a1 ( a varchar(65535))charset=latin1;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs,
eck the manual. You have to change some columns to TEXT or BLOBs
mysql
> create table a1 ( a varchar(65534))charset=latin1; ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, eck the manual. You have to change some columns to TEXT or BLOBs
mysql
> create table a1 ( a varchar(65533))charset=latin1; ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, eck the manual. You have to change some columns to TEXT or BLOBs
mysql
> create table a1 ( a varchar(65532))charset=latin1; Query OK, 0 rows affected (0.33 sec)

 

不能插入汉字:

mysql> insert into a1 select repeat("",65532);
ERROR 1366 (HY000): Incorrect string value: '\xE6\x88\x91\xE6\x88\x91...' for column 'a' at row 1
mysql> insert into a1 select "";
ERROR 1366 (HY000): Incorrect string value: '\xE6\x88\x91' for column 'a' at row 1

mysql> insert into a1 select repeat("a",65532); Query OK, 1 row affected (0.17 sec) Records: 1 Duplicates: 0 Warnings: 0

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167050.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pytorch lstm时间序列预测问题踩坑「建议收藏」

    这里写目录标题1.做时间序列问题2.问题1.数据集自己做,为多个输入对应多个或一个输出2.损失函数注意:不能用交叉熵nn.CrossEntropyLoss()3.准确率1.做时间序列问题2.问题1.数据集自己做,为多个输入对应多个或一个输出2.损失函数注意:不能用交叉熵nn.CrossEntropyLoss()nn.CrossEntropyLoss()要求target目标值即真实值是标签,是torch.int64类型数据,即整数,不允许小数,如果输入小数会强行取整,应该用nn.MSELo

    2022年4月16日
    43
  • 扛得住的MySQL数据库架构「建议收藏」

    扛得住的MySQL数据库架构

    2022年2月17日
    40
  • 网络协议、socket、webSocket

    网络协议、socket、webSocket一、网络协议网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。1、OSI七层协议OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范。OSI模型有7层结构,从上到下分别是7应用层6表示层5会话层4传输层3网络层2数据链路层1物理层。下面的图表显示不同的协议在最初OSI模型中的位置:7应用层例如HTTP、SMTP…

    2022年5月2日
    41
  • github开发人员在七夕搞事情:remote: Support for password authentication was removed on August 13, 2021.

    github开发人员在七夕搞事情:remote: Support for password authentication was removed on August 13, 2021.1问题描述如果你在七夕(没错就是2020年8月14日)的这一天刚好加班,又刚好去访问了全球最大的同性交友网站,又刚好去更新提交代码,又或你创建了一个新的仓库送给自己,又刚好想把这个仓库送给(push)github,你就刚好会遇到这个问题:remote:SupportforpasswordauthenticationwasremovedonAugust13,2021.Pleaseuseapersonalaccesstokeninstead.具体如下:(yolov4)

    2022年7月20日
    27
  • SPSS教程——进行卡方检验的相关步骤

    SPSS教程——进行卡方检验的相关步骤作为非参数检验之一的卡方检验用于判断样本是否来自特定分布的总体的检验方法,主要用于研究总体分布和理论分布是否存在显著差异。适用于有多个分类值的总体分布的分析。在这次教程中,我们给大家演示SPSS如何进行卡方检验。下面我们使用IBMSPSSStatistics26(win10)结合具体案例详细演示一遍吧。打开样本数据医学家研究发现,在一周中,周一心脏病患者猝死的人数较多,其他时间相同。周一到周日的比例近似为2.8:1:1:1:1:1:1。为此在网上搜集了一份心脏病人死亡日期的样本数据,用于推断

    2022年5月17日
    48
  • 突然想去旅游

    突然想去旅游  突然想去旅游,一个人,静静的,去到那些宁静的自然风光中去,置身其中,什么也不想! 

    2022年4月29日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号