精华内容
下载资源
问答
  • 数据库中的 varchar(255) MySQL | ver < 4.1: VARCHAR以字节单位存储,所以假设全部常用汉字...VARCHAR以字符单位存储,假设输入仍然常用汉字,则VARCHAR(255)可以存放255个汉字。 另外,据我所知,M...

    数据库中的 varchar(255)

    MySQL | ver < 4.1: VARCHAR以字节为单位存储,所以假设全部为常用汉字(UTF-8

    3字节编码长度),则VARCHAR(255)共可存放约85个汉字;

    MySQL | ver >= 4.1:

    VARCHAR以字符为单位存储,假设输入仍然为常用汉字,则VARCHAR(255)可以存放255个汉字。 

    另外,据我所知,MySQL对UTF-8的支持也仅仅限于1~3字节编码长度(Unicode:0x0000~0xFFFF),可以满足大部分需求,但是生僻字就不行了。

    那么VARCHAR的最大值是多少呢?

    根据官方文档,VARCHAR 最多可以是 65535 字节(这也意味着一条记录只有这一个字段,因为 MySQL 一行只能包含 65535 字节)。

    然而,无法为这么长的 VARCHAR 做索引,对于 MyISAM,可以对前 1000 个字节做索引,对于 InnoDB,则只有 767 字节。(来源依据)

    在varchar长度接近256时,varchar长度设置成255的好处:

    1、方便InnoDB建索引,对于 MyISAM,可以对前 1000 个字节做索引,对于 InnoDB,则只有 767 字节。(来源依据)。255X3=765

    2、少申请一个字节,记录字符创长度,一个8位的tinyint,可以表示的无符号数值的范围是,0-255,如果长度超过了255,需要在申请个字节。

    展开全文
  • 先抛出官网答案:In contrast to CHAR, VARCHAR 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 ...

    先抛出官网答案:

    In contrast to CHAR, VARCHAR 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.

    简单翻译一下就是

    char, varchar类型的值,会有一个长度标识位来存值长度。

    当定义varchar长度小于等于255时,长度标识位需要一个字节;

    当大于255时,长度标识位需要两个字节

    也就是说,当我们定义一个varchar(255)的字段时,其实它真实使用的空间是256(255+1)字节;(注意,字段非空,latin1编码)

    当我们定义一个一个varchar(256)字段时,它真实使用的空间是258(256+2)字节

    简单实践证明一下:

    试着创建一个字段长度超过mysql限制的表,从系统提示知道,列长度不能超过65535

    mysql> create table test_varchar_length(v varchar(65536) not null) CHARSET=latin1;

    ERROR 1074 (42000): Column length too big for column 'v' (max = 65535); use BLOB or TEXT instead

    创建一个字段长度小于max, 65534的表,继续失败

    mysql> create table test_varchar_length(v varchar(65534) not null) CHARSET=latin1;

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

    创建一个65533的表,65533+2=65535(max), 成功

    mysql> create table test_varchar_length(v varchar(65533) not null) CHARSET=latin1;

    Query OK, 0 rows affected (0.05 sec)

    (注意,上面的例子字符集用的latin1,如果使用utf8mb4,在mysql中一个长度需要四个字节,计算临界值时需要考虑。)

    有兴趣的朋友还可以试着把字段定于成 default null试试,会发现结果又不一样,可以自己探索下原因

    展开全文
  • 今天在生产预备完成10点后执行表新增,多了个心眼,让DBA看一下新增字段语句是不是有影响。...DBA看过后只说了一句,256修改为255,然后晚上10点后执行。我当时在想,我一直建表都是32,64,128,256,5

    今天在生产预备完成10点后执行表新增,多了个心眼,让DBA看一下新增字段语句是不是有影响。因为生产数据库数据实在太多了,不敢随意的新增字段以及索引。

    mysq新增字段ddl

    ALTER TABLE kohala_ucs.t_single_extra MODIFY personal_sign varchar(256) NULL DEFAULT '' COMMENT '个性签名';

    DBA看过后只说了一句,256修改为255,然后晚上10点后执行。我当时在想,我一直建表都是32,64,128,256,512,1024长度,为何要255呢。只能去网上搜搜为何?

    先抛出官网答案:

    In contrast to CHAR, VARCHAR 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.

    简单翻译一下就是

    char, varchar类型的值,会有一个长度标识位来存值长度。
    当定义varchar长度小于等于255时,长度标识位需要一个字节;
    当大于255时,长度标识位需要两个字节

    也就是说,当我们定义一个varchar(255)的字段时,其实它真实使用的空间是256(255+1)字节;(注意,字段非空,latin1编码
    当我们定义一个一个varchar(256)字段时,它真实使用的空间是258(256+2)字节

    我们DBA给的答复是:

    因为超过256会申请额外的空间,进行全表锁表,然后进行新增字段,故在高并发的情况下,肯定会影响数据库性能。

    现在大家明白了为何要设置255了吧

     

    展开全文
  • 4.1: VARCHAR以字节单位存储,所以假设全部常用汉字(UTF-83字节编码长度),则VARCHAR(255)共可存放约85个汉字;MySQL | ver >= 4.1:VARCHAR以字符单位存储,假设输入仍然常用汉字,则VARCHAR(255)可以...

    数据库中的 varchar(255)

    MySQL | ver < 4.1: VARCHAR以字节为单位存储,所以假设全部为常用汉字(UTF-8

    3字节编码长度),则VARCHAR(255)共可存放约85个汉字;

    MySQL | ver >= 4.1:

    VARCHAR以字符为单位存储,假设输入仍然为常用汉字,则VARCHAR(255)可以存放255个汉字。

    另外,据我所知,MySQL对UTF-8的支持也仅仅限于1~3字节编码长度(Unicode:0x0000~0xFFFF),可以满足大部分需求,但是生僻字就不行了。

    那么VARCHAR的最大值是多少呢?

    根据官方文档,VARCHAR 最多可以是 65535 字节(这也意味着一条记录只有这一个字段,因为 MySQL 一行只能包含 65535 字节)。

    然而,无法为这么长的 VARCHAR 做索引,对于 MyISAM,可以对前 1000 个字节做索引,对于 InnoDB,则只有 767 字节。(来源依据)

    在varchar长度接近256时,varchar长度设置成255的好处:

    1、方便InnoDB建索引,对于 MyISAM,可以对前 1000 个字节做索引,对于 InnoDB,则只有 767 字节。(来源依据)。255X3=765

    2、少申请一个字节,记录字符创长度,一个8位的tinyint,可以表示的无符号数值的范围是,0-255,如果长度超过了255,需要在申请个字节。

    展开全文
  • 有没有觉得我们设置varchar长度的时候,很多时候都设置成255,这是为什么呢?其实是因为在5.5.3版本之前InnoDB存储引擎的表索引的前缀长度最长是767字节(bytes),MyIsam存储引擎的表索引的前缀长度最长是1000字节...
  • <p>When I first learnt about field types in MySQL I would define anything that was not a number as a VARCHAR and set the length to anything. 500 2000, but am I right in saying the maximum is actually ...
  • 很多时候我们设置varchar(255)都习以为常了,甚至我还遇到过有人以为varchar不能设置超过255的人。其实varchar没有明确最大长度,然后有人说那65535字节(bytes)不是吗? 但是事实上如果你用的utf-8编码的话按理...
  • 当大于255时,长度标识位需要两个字节也就是说,当我们定义一个varchar(255)的字段时,其实它真实使用的空间是256(255+1)字节;(注意,字段非空,latin1编码)当我们定义一个一个varchar(256)字段时,它真实使用的...
  • 首先看下为什么MySQL中varchar会经常设置成varchar(255)?MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定)。在 MySQL5.0以上的版本中,...
  • 今天翻阅《高性能Mysql(第2版)》看到的,varchar(255)与varchar(80)都是保持可变的字符串,当使用ROW_FORMAT=FIXED创建MyISAM表时,会每行使用固定的长度空间,这样设置不同的varchar长度值时,存储相同数据所占用...
  • 起因 最近在整理代码规范,按照之前oracle的习惯,定了以下的字段长度设定规范: 名称字段:varchar(200) 较长的名称字段/简介字段:varchar(500) ... 但在被问起为什么不设置为经常见到的varchar(...
  • 起因最近在整理代码规范,按照之前oracle的习惯,定了以下的字段长度设定规范:名称字段:varchar(200)较长的名称字段/简介字段:varchar...但在被问起为什么不设置为经常见到的varchar(255)时,一时回答不上来。...
  • VARCHAR 是可变长度的。 CHAR 是固定长度。 如果您的内容是固定大小的,那么您将获得更好性能的...2.最大数量 数据类型可容纳的字符数为255个字符。 3.它比varchar**快50%**。 4.使用静态内容分配 VARCHAR 1...
  • char列的长度固定创建表时的长度,其范围0~255。当保存char类型时,在它们右边填充空格以达到指定的长度。当检索到char值时,尾部的空格被删除掉。在存储或检索的过程中不进行大小写转换。 varchar列中的值...
  • 对于 int 类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用的 int(11) 代表什么意思,很长时间以来我都以为这代表着限制 int 的长度 11 位,直到有天看到篇文章才明白,11 代表的并不是长度,而是...
  • 对于 int 类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用的 int(11) 代表什么意思,11 代表的并不是长度,而是字符的显示宽度,在字段类型 int 时,无论你显示宽度设置多少,int 类型能存储的...
  • MySQL的vachar字段的类型虽然...varchar()最大可设置 65532 / 3 = 21844 (utf8)char()最大是255个字符,不论什么编码英文和数字的话两种都是一个字母是1个字节.就中文汉字来说,utf8占3个字节,gbk占2个字节。varch...
  • 根据Oracle的习惯,设置了以下字段长度设置规范:名称字段:varchar(200)长名字段/简介字段:varchar(500)特别长的描述字段:varchar(2000)具有超过2000个汉字的字段:文本为什么长度为200,而不是100或300,也被认为拍了...
  • varchar类型存储变长字段的字符类型,当存储的字符串长度小于255字节时,其需要1字节的空间,当大于255字节时,需要2字节的空间。 使用2 ^ n长度是更好的磁盘或内存块对齐。对齐块更快。今天“块”的大小更大,...
  • MySQL里的char和varchar什么区别?首先是存储长度的不同,char类型在创建表的时候就固定分配好了长度和存储空间,分配多少空间将会占用多少空间,可以设置的最大长度char(255),当创建好char列之后,如果存储的...
  • 长度可以从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。 VARCHAR列中的值为可变长字符串。长度可以指定...
  • 场景是一个查询的语句查询条件的类型为varchar,如果传int型会出现什么情况 copy个例子 CREATE TABLE `t_test` ( `id` int(11) NOT NULL, `no` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci ...
  • CHAR列的长度固定创建表时声明的长度,长度可以从0到255(2^8-1=255)的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小...
  • 长度可以从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。VARCHAR列中的值为可变长字符串。长度可以指定...
  • MySQL里的char和varchar什么区别?首先是存储长度的不同,char类型在创建表的时候就固定分配好了长度和存储空间,分配多少空间将会占用多少空间,可以设置的最大长度char(255),当创建好char列之后,如果存储的...
  • <pre><code>|date (varchar(255))|time (varchar(255))|price (decimal(25,10))| |===================|===================|======================| |01.01.2016 |00:00 |[some value] | |01.01.2016 |01:00 |...
  • CHAR列的长度固定创建表时声明的长度,长度可以从0到255(2^8-1=255)的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小...
  • 长度可以从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。 VARCHAR列中的值为可变长字符串。长度可以...
  • 答:char和varchar最大的不同就是一个是固定长度,一个是可变...1)varchar(M)和char(M),M都表示字符数.varchar的最大长度65535个字节,不同的编码所对应的最大可存储的字符数不同。2)char最多可以存放255个字符...
  • 相信很多小白都遇到过这种情况,就是什么时候用varchar(),什么时候用char(). (1)VARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要。他们都是用来储存字符数值小于255的字符,mysql5.0之前是varchar支持最大255...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 172
精华内容 68
关键字:

varchar为什么255