精华内容
下载资源
问答
  • 这是手册上的,varchar(0)应该最大值就是0,你存不进去东西,应该就是一个null,回头我测试下。下面是mysql手册上写的很详细。字符串类型的存储需求列类型存储需求CHAR(M)M个字节,0<=M<=255VARCHAR(M)L+1个...

    MyISAM表中行的最大大小为65,534字节。每个BLOB和TEXT列

    账户只占其中的5至9个字节。

    这是手册上的,varchar(0)应该最大值就是0,你存不进去东西,应该就是一个null,回头我测试下。

    下面是mysql手册上写的很详细。字符串类型的存储需求

    列类型    存储需求

    CHAR(M)    M个字节,0 <= M <= 255

    VARCHAR(M)    L+1个字节,其中L <= M 且0 <= M <= 65535(参见下面的注释)

    BINARY(M)    M个字节,0 <= M <= 255

    VARBINARY(M)    L+1个字节,其中L <= M 且0 <= M <= 255

    TINYBLOB, TINYTEXT    L+1个字节,其中L 

    BLOB, TEXT    L+2个字节,其中L 

    MEDIUMBLOB, MEDIUMTEXT    L+3个字节,其中L 

    LONGBLOB, LONGTEXT    L+4个字节,其中L 

    ENUM('value1','value2',...)    1或2个字节,取决于枚举值的个数(最多65,535个值)

    SET('value1','value2',...)    1、2、3、4或者8个字节,取决于set成员的数目(最多64个成员)

    展开全文
  • Mysql中varchar长度设置方法

    千次阅读 2021-01-19 05:01:47
    如果某一项中设置的是varchar(50)那么对英文当然是50那么对中文呢utf-8的中文占3个字节那么,这个varchar(50)是不是只能存16个汉字了?mysql varchar(50) 不管中文 还是英文 都是存50个的...(VARCHAR的最大实际长度由...

    如果某一项中设置的是varchar(50)

    那么对英文当然是50

    那么对中文呢

    utf-8的中文占3个字节

    那么,这个varchar(50)是不是只能存16个汉字了?

    mysql varchar(50) 不管中文 还是英文 都是存50个的

    MySQL5的文档,其中对varchar字段类型这样描述:varchar(m) 变长字符串。M 表示最大列长度。M的范围是0到65,535。(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,最大有效长度是65,532字节)。

    为何会这般变换?真是感觉MySQL的手册做的太不友好了,因为你要仔细的继续往下读才会发现这段描述:MySQL 5.1遵从标准SQL规范,并且不删除VARCHAR值的尾部空格。VARCHAR保存时用一个字节或两个字节长的前缀+数据。如果VARCHAR列声明的长度大于255,长度前缀是两个字节。

    好了,貌似懂了一点。但具体他说的长度大于255时使用2个字节长度前缀,小学减法题:65535 - 2 = 65533啊。不知道这些大牛如何计算的,暂且保留疑问吧?

    注:我测试了一下使用UTF8编码,varchar的最大长度为21854字节。

    在mysql 5.0.45版本,数据库编码utf8下进行测试:varchar最长定义为21785。也就是说不论字母、数字、汉字,只能放21785个。

    推想:varchar字节最大65535,utf8编码一个字符3个字节65535/3=21785。

    补充知识:

    1.varchar类型的变化

    MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定)。在 MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和结束位占去了3个字 节,也就是说,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的数据可以使用可变长的varchar来存放,这样就能有效的减少数据库文 件的大小。

    MySQL 数据库的varchar类型在4.1以下的版本中,nvarchar(存储的是Unicode数据类型的字符)不管是一个字符还是一个汉字,都存为2个字 节 ,一般用作中文或者其他语言输入,这样不容易乱码 ;varchar: 汉字是2个字节,其他字符存为1个字节 ,varchar适合输入英文和数字。

    4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) ;5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是 65532字节 ;varchar(20)在Mysql4中最大也不过是20个字节,但是Mysql5根据编码不同,存储大小也不同,具体有以下规则:

    a) 存储限制

    varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。

    b) 编码长度限制

    字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;

    字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。

    若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。

    c) 行长度限制

    导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示

    ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。

    2.CHAR(M), VARCHAR(M)不同之处

    CHAR(M)定义的列的长度为固定的,M取值可以为0~255之间,当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检 索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义 char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充。

    VARCHAR(M)定义的列的长度为可变长字符串,M取值可以为0~65535之间,(VARCHAR的最大有效长度由最大行大小和使用 的字符集确定。整体最大长度是65,532字节)。VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则 使用两个字节)。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。varchar存储变长数据,但存储效率没有 CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么"+1"呢?这一个字节用于保存实际使用了多大的长度。 从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

    CHAR和VARCHAR最大的不同就是一个是固定长度,一个是可变长度。由于是可变长度,因此实际存储的时候是实际字符串再加上一个记录 字符串长度的字节(如果超过255则需要两个字节)。如果分配给CHAR或VARCHAR列的值超过列的最大长度,则对值进行裁剪以使其适合。如果被裁掉 的字符不是空格,则会产生一条警告。如果裁剪非空格字符,则会造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入。

    3. VARCHAR和TEXT、BlOB类型的区别

    VARCHAR,BLOB和TEXT类型是变长类型,对于其存储需求取决于列值的实际长度(在前面的表格中用L表示),而不是取决于类型 的最大可能尺寸。例如,一个VARCHAR(10)列能保存最大长度为10个字符的一个字符串,实际的存储需要是字符串的长度 ,加上1个字节以记录字符串的长度。对于字符串'abcd',L是4而存储要求是5个字节。

    BLOB和TEXT类型需要1,2,3或4个字节来记录列值的长度,这取决于类型的最大可能长度。VARCHAR需要定义大小,有65535字节的最大限制;TEXT则不需要。如果你把一个超过列类型最大长度的值赋给一个BLOB或TEXT列,值被截断以适合它。

    一个BLOB是一个能保存可变数量的数据的二进制的大对象。4个BLOB类型TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB仅仅在他们能保存值的最大长度方面有所不同。

    BLOB 可以储存图片,TEXT不行,TEXT只能储存纯文本文件。4个TEXT类型TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT对应于 4个BLOB类型,并且有同样的最大长度和存储需求。在BLOB和TEXT类型之间的唯一差别是对BLOB值的排序和比较以大小写敏感方式执行,而对 TEXT值是大小写不敏感的。换句话说,一个TEXT是一个大小写不敏感的BLOB。

    4.总结char,varchar,text区别

    长度的区别,char范围是0~255,varchar最长是64k,但是注意这里的64k是整个row的长度,要考虑到其它的 column,还有如果存在not null的时候也会占用一位,对不同的字符集,有效长度还不一样,比如utf8的,最多21845,还要除去别的column,但是varchar在一般 情况下存储都够用了。如果遇到了大文本,考虑使用text,最大能到4G。

    效率来说基本是char>varchar>text,但是如果使用的是Innodb引擎的话,推荐使用varchar代替char

    char和varchar可以有默认值,text不能指定默认值

    数据库选择合适的数据类型存储还是很有必要的,对性能有一定影响。这里在零碎记录两笔,对于int类型的,如果不需要存取负值,最好加上unsigned;对于经常出现在where语句中的字段,考虑加索引,整形的尤其适合加索引。

    以上所述是小编给大家介绍的Mysql中varchar长度设置方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    展开全文
  • 说明:IDE与数据库字段字符字符集均UTF-8,MySQl版本5.7.x,JDK1.8.x在设计数据库的时候,我们往往要给字段设置最大长度:如下图所示,设定name字段最长长度为16,那么在插入数据的时候,最多可以插入多长的数据呢...

    说明:IDE与数据库字段字符字符集均为UTF-8,MySQl版本5.7.x,JDK1.8.x

    在设计数据库的时候,我们往往要给字段设置最大长度:如下图所示,设定name字段最长长度为16,那么在插入数据的时候,最多可以插入多长的数据呢?

    419254be3ea59cd6ba9c71929d6b7f35.png

    先说结论:最长长度即调用java字符串的length方法返回的结果,即数据库字段的长度单位为 字符

    -----------------------------------------------------------------

    在String源码中可以看到,String的length()方法返回的长度是字符

    1fbf9a1cc878772968676978cb859b2e.png

    4a3edc09c28534cd5d2eda902f03742a.png

    -----------------------------------------------------------------

    如果插入数据超过数据库字段的最大长度,则会抛出“Data too long for column”异常

    93a45c4c8226249fc7c04b848377dc2c.png

    48c800f38d95afbb7b34506ff1d0c59f.png

    87af5e379b41151676faee3c1e90f08e.png

    -----------------------------------------------------------------

    我们知道,由于中文的体系很大,中文与英文字符在计算机中的表示方式并不一样,但是如上图所示,16个汉字“哈”组成的字符串与15个字母与一个英文符号组成的字符串,其length方法调用返回值均为16,这是因为我们平时用的是字符,而每一个字符后面的字节数是不一定的。一般来说,UTF-8编码方式下,一个中文字符由3个字节组成;GBK编码方式下,一个中文字符由2个字节组成;ISO-8859-1编码方式下,一个中文字符由1个字节组成。由下面的图片可以推算出其对应关系。

    06edaf7c93c47ae382c26930ab8853e4.png

    f88aeb75d0692a8ed52c27073c84b87e.png

    在Web开发过程中,一般由前端检测数据长度;为了防止前端的检测被绕过,可以在后端再做一次检测

    展开全文
  • 首先VARCHAR不是定长的,而是可变的,所以一般业务开发我们都要尽量使用最小的长度来满足需求,以免浪费空间,影响性能,而既然是可变的长度,那就得有保存长度的地方,所以如果VARCHAR长度设置在255以下,那只会...

    首先VARCHAR不是定长的,而是可变的,所以一般业务开发我们都要尽量使用最小的长度来满足需求,以免浪费空间,影响性能,而既然是可变的长度,那就得有保存长度的地方,所以如果VARCHAR的长度设置在255以下,那只会使用额外一个字节来保存长度,但是如果VARCHAR的长度设置在255以上,那么就会使用额外的两个字节来保存长度,无形中就浪费了存储空间。

    展开全文
  • postgresql varchar长度设置问题

    千次阅读 2021-03-31 11:46:46
    postgresql varchar 字母数字占用一个字符 中文占用3个字符 可以执行select char_length()函数测试
  • 虽然这种情况不应该发生,通常像我们...说一下情况:MySQL字段有个varchar值字段设置的太短了,设置了30个,(我依稀记得varchar是可扩展的,当然现实并不容忍我的依稀),所以我只能找一个方法在保证数据库数据不变的...
  • MySql中varchar长度的设置问题

    千次阅读 2021-01-18 22:37:31
    根据自己多年的工作经验,特别是在接收旧的项目时,varcahr的长度设置有不同的风格,针对varchar长度的设置问题,自己划分了不同的门派。1.强迫症派:长度设置4或者8的倍数,达到内存对齐的目的;2.贴心派:长度...
  • 1、限制规则字段的限制在字段定义的时候有以下规则:a)存储限制varchar字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。...
  • 文章目录1、MySQL的字段类型1.1、数值类型1.4、文本类型1.5、二进制数据类型1.6、日期类型2、varchar长度设置2.1、结论2.2、varchar(n)的最大值字符数2.3、varchar(n)需要1-2个额外字节记录长度n的值2.3.1 关于内存...
  • 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小...
  • mysql varchar长度问题

    2021-02-08 05:10:36
    0 rows affected (0.01 sec) The following statement to create table t2 fails because the columns are NULL and require additional space that causes the row size to exceed 65,535 bytes:mysql> CREATE ...
  • 我创建了一个带有UTF-8 VARCHAR(5000)的表,并用数据填充它.但看起来这个字段允许的数据超出了指示范围:mysql> DESCRIBE test;+---------+------------------+------+-----+---------+----------------+| Field |...
  • 一、确定varchar长度设定对文件存储大小的影响mysql 8.17版本中,经过本人测定。varchar2(M)的存储大小,近似于(实际存储字符数)*1个字符的字节数(根据编码确定,utf=3, utf8mb4=4)。跟M的大小无关。M只是限定长度,...
  • MySQL VARCHAR长度和UTF-8

    2021-01-19 14:02:19
    有趣的是(我没有想过它)varchar列的最大长度受utf8影响如下: The effective maximum length of a VARCHAR in MySQL 5.0.3 and later is subject to the maximum row size (65,535 bytes, which is shared among ...
  • MySQL varchar索引长度

    2021-01-19 02:14:58
    我有这样的表:CREATE TABLE `products` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(512) NOT NULL,`description` text,PRIMARY KEY (`id`),) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT ...
  • 以前一直都认为有两个字节来记录长度(长度小也可以用一个字节记录),所以这个问题当时觉得就挺无聊的不过后来群里有人给了解释,突然才发现原来事情不是这么简单MYSQL COMPACT格式,每条记录有一个字节来表示NULL...
  • mysql5.0.3及以前版本varchar类型最大长度是255字符,之后版本理论上长度可取值范围是1到65535字节,但实际上不可能取到这么大的值,原因是65535字节是mysql1行数据占用的长度。所以单个字段是不可能占用这么大的...
  • 关于 varchar2 的最大长度varchar2有两个最大长度:一个是在字段类型4000;一个是在PL/SQL中变量类型32767。今天犯了一个小错误,就是函数的varchar2类型的返回值长度也是4000,而不是我以为的32767。想了一下,这是...
  • In a MySQL database, how would I set a varchar to have unlimited length, so that I can store long web pages? IF not , then what is the Maximum Size?I know about Text Types to store larger strings. Is ...
  • mysql中varchar最大长度有多大?mysql中varchar最多能存储65535个字节的数据。varchar 的最大长度受限于最大行长度(max row size,65535bytes)。65535并非一个很准确的上限,能够继承减少这个上限。65535个字节包含...
  • 以前有学生问过,varchar2(4k)与varchar2(1)里面存同样的数据会怎么样。我喜欢直接用测试结果说话,现在把实验补上CREATE TABLE vc1(c1 VARCHAR2(1));CREATE TABLE vc4k(c1 VARCHAR2(4000));分别加入1W行数据进去SQL...
  • 一般来说:完全确定长度的,如邮编、股票代码、手机号码...varchar长度,最好是在够用(需要适当预测未来需求)且方便管理的前提下尽可能短。因为SQLServer的最大索引键是900字节,在一个varchar(1000)或两个varc...
  • MySQL的vachar字段的类型虽然...varchar()最大可设置 65532 / 3 = 21844 (utf8)char()最大是255个字符,不论什么编码英文和数字的话两种都是一个字母是1个字节.就中文汉字来说,utf8占3个字节,gbk占2个字节。varch...
  • character varying(n),varchar(n) 变长,有长度限制 character(n),char(n) 定长,不足补空白 text 变长,无长度限制 Ps:n 表示字符长度,也就是 1 个汉字是 1 个字符(3 个字节),字母 / 数字都是...
  • mysql varchar长度的含义

    2021-01-30 12:29:48
    今天发现项目中有的数据不能插入到mysql数据库中。查看日志报错:Caused by: ...原来name长度不够,项目中name定义varcahr(30),目测了一下插入的数据确实挺长,就去name表数据源中查找最...
  • CREATE TABLE `test` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`content` varchar(5) NOT NULL DEFAULT '',PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_general...
  • MySQL中varchar字段最大长度是多少

    千次阅读 2020-12-31 10:55:40
    文章目录背景字节和字符的区分什么是varchar(255)而不是(256)varchar字段最大值是多少latin1字符集编码下utf8字符集编码下utf8mb4字符集编码下总结 背景 你是否知道MySQL中的varchar字段类型最大能够存储多少数据...
  • 各个数据库对varchar类型的长度定义是不大一样的,拿DM举例,varchar类型长度上限和数据库页大小和表的定义有关,而且最大上限不超过8188字节。具体不同页大小设置对varchar大小上限的影响可以看我的另一篇博客...
  • VARCHAR2数据类型的最大长度问题,是一个让人迷惑的问题,因为VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Database中的字段类型。简单的说,要看你在什么应用场景下,否则难以回答VARCHAR2数据类型的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 178,453
精华内容 71,381
关键字:

varchar长度为0