精华内容
下载资源
问答
  • 今天在生产预备完成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了吧

     

    展开全文
  • 很多时候我们设置varchar(255)都习以为常了,甚至我还遇到过有人以为varchar不能设置超过255的人。其实varchar没有明确最大长度,然后有人说那65535字节(bytes)不是吗? 但是事实上如果你用的utf-8编码的话按理...

    很多时候我们设置varchar(255)都习以为常了,甚至我还遇到过有人以为varchar不能设置超过255的人。其实varchar没有明确最大长度,然后有人说那65535字节(bytes)不是吗?

    但是事实上如果你用的 utf8 编码的话按理最大可以设置到 varchar(21845),但是其实一般都会说你超出。其实MySQL要求一个行定义长度不能超过 65535 bytes(所有字符串类型字段包括其字段名称占用空间都计算在内, text、blob等大字段类型除外)。

    如下图我先设置了个21842成功了,后面加个长度为3的varchar都会报错,所有如果一个表有很多varchar字段的时候,不应该把varchar设置的特别大,会影响后面的字段
    这里写图片描述

    言归正传那为什么我们会经常性设置成varchar(255)呢?

    首先我们要知道一个概念:InnoDB存储引擎的表索引的前缀长度最长是767字节(bytes)(前缀长度适用于mysql5.6及以前,后续版本有变化)

    你如果需要建索引,就不能超过 767 bytes(mysql5.6及以前,后续版本有变化);utf8编码时 255*3=765bytes ,恰恰是能建索引情况下的最大值。

    如果像lavavel5.3往后 使用的是utf8mb4编码,默认字符长度则应该是 767除以4向下取整,也就是191。

    总结:varchar(255) 不是最优的字符长度,最优还是应该根据实际需要的来。但是这是一个保证你能少出错的一个很好的默认值

    展开全文
  • 数据库中的 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,需要在申请个字节。

    展开全文
  • 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,需要在申请个字节。

    展开全文
  • mysql varchar(255) 浅谈

    2021-01-19 03:14:01
    有没有觉得我们设置varchar长度的时候,很多时候都设置成255,这是为什么呢?其实是因为在5.5.3版本之前InnoDB存储引擎的表索引的前缀长度最长是767字节(bytes),MyIsam存储引擎的表索引的前缀长度最长是1000字节...
  • 首先看下为什么MySQL中varchar会经常设置成varchar(255)?MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定)。在 MySQL5.0以上的版本中,...
  • 当大于255时,长度标识位需要两个字节也就是说,当我们定义一个varchar(255)的字段时,其实它真实使用的空间是256(255+1)字节;(注意,字段非空,latin1编码)当我们定义一个一个varchar(256)字段时,它真实使用的...
  • 4.1: VARCHAR以字节单位存储,所以假设全部常用汉字(UTF-83字节编码长度),则VARCHAR(255)共可存放约85个汉字;MySQL | ver >= 4.1:VARCHAR以字符单位存储,假设输入仍然常用汉字,则VARCHAR(255)可以...
  • 项目里突然varchar字段设置255也不够用了,记得规定不能超过255,今天查了一下,现总结如下: MySQL要求一个行定义长度不能超过 65535 bytes(所有字符串类型字段包括其字段名称占用空间都计算在内, text、blob等...
  • 主要介绍了探究MySQL中varchar的定义长度,文中主要对其长度究竟是字节还是字符做出了相关实验,需要的朋友可以参考下
  • MySQL的vachar字段的类型虽然...varchar()最大可设置 65532 / 3 = 21844 (utf8)char()最大是255个字符,不论什么编码英文和数字的话两种都是一个字母是1个字节.就中文汉字来说,utf8占3个字节,gbk占2个字节。varch...
  • 数据库中的 varchar(255)

    千次阅读 2018-11-14 16:46:37
    在字符集UTF-8的情况下: MySQL | ver &lt; 4.1: VARCHAR以字节单位存储,所以假设全部...VARCHAR以字符单位存储,假设输入仍然常用汉字,则VARCHAR(255)可以存放255个汉字。  另外,据我所知,My...
  • mysql定义字段varchar(255)报错超长?

    千次阅读 2020-11-28 11:08:37
    平时习惯性的设计变长字段varchar(255),确保正常情况下数据库用一个字节保存长度信息,节省内存。但是有一次建表语气。 create table user ( id int auto_increment comment '自增主键', username varchar(255) ...
  • <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 ...
  • 起因 最近在整理代码规范,按照之前oracle的习惯,定了以下的字段长度设定规范: 名称字段:varchar(200) 较长的名称字段/简介字段:varchar(500) ... 但在被问起为什么不设置为经常见到的varchar(...
  • varchar(20)和varchar(255)的空间开销区别

    千次阅读 2019-08-03 10:45:57
    MySQL建立索引时如果没有限制索引的大小,索引长度会默认采用的该字段的长度,也就是说varchar(20)和varchar(255)对应的索引长度分别203(utf-8)(+2+1),2553(utf-8)(+2+1),其中"+2"用来存储长度信息,“+1”用来...
  • 对于 int 类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用的 int(11) 代表什么意思,很长时间以来我都以为这代表着限制 int 的长度 11 位,直到有天看到篇文章才明白,11 代表的并不是长度,而是...
  • sql语句字段varchar(255)改text

    千次阅读 2020-06-04 15:24:29
    在项目试运行过程中,用户提交表单时报错,经查询字段content超出数据库限制,现把数据库中的字段范围调大,varchar(255)改text 数据库sql语句: ALTER TABLE ht_apply_maintenance CHANGE content content text;
  • 对于VARCHAR数据类型来说,硬盘上的存储空间虽然都是根据实际字符长度来分配存储空间的,但是对于内存来说,则不是。其时使用固定大小的内存块来保存值。简单的说,就是使用字符类型中定义的长度,即200个字符空间。...
  • 这是一个有255个 “我”的字符串插入到 一个 设置为varchar(255)的实例代码StringBuffer sb = new StringBuffer(); for(int i=0;i<256;i++){ sb.append("我"); } PreparedStatement pstmt = conn_2.prepare...
  • mysql中的Varchar(255)可以放多少个汉字

    万次阅读 2019-07-03 17:44:18
    在字符集UTF-8的情况下: MySQL | ver < 4.1: VARCHAR以字节单位存储,所以假设全部常用汉字(UTF-8 ...VARCHAR以字符单位存储,假设输入仍然常用汉字,则VARCHAR(255)可以存放255个汉字。 ...
  • varchar255可以存多少汉字

    万次阅读 2016-05-25 16:24:29
    在字符集UTF-8的情况下: MySQL | ver < 4.1: VARCHAR以字节单位存储,...= 4.1: VARCHAR以字符单位存储,假设输入仍然常用汉字,则VARCHAR(255)可以存放255个汉字。 另外,据我所知,MySQL对UTF-8...
  • 今天翻阅《高性能Mysql(第2版)》看到的,varchar(255)与varchar(80)都是保持可变的字符串,当使用ROW_FORMAT=FIXED创建MyISAM表时,会每行使用固定的长度空间,这样设置不同的varchar长度值时,存储相同数据所占用...
  • Mysql varchar建索引遇到长度太长的问题: CREATE TABLE `t_crrs_record` ( `ID` varchar(128) NOT NULL COMMENT '主键ID', `SYSTEM_CODE` varchar(32) DEFAULT NULL COMMENT '编码', `BUSINESS_ID` varchar...
  • mysql 中的varchar(255) 能放多少汉字

    万次阅读 2014-11-15 23:20:05
    MySQL 中的 VARCHAR(255) 可以存放 1 - 255 个 UTF-8 格式的汉字 ... latin1 字符集最多可以存放 85 个 UTF-8 格式的汉字 ... utf-8 字符集最多可以存放 255 个 UTF-8 格式的汉字 ... 如果谁可以找到一个...
  • 如题,数据库某列varchar(255),java里面用String变量接收要插入去的数据然后再插入数据库,怎么限制这个变量在255个字符内?难道要用char[255] ?
  • mysql主键varchar(255)报错

    千次阅读 2016-01-18 21:30:53
    utf8mb4 字符集下, 一些特殊字符会占用 4 个字节, 你设置长度 255, 则占用字节 255 * 4 = 1020 byte 而mysql 的主键最大长度貌似不能超过 767 byte1、限制规则 字段的限制在字段定义的时候有以下规则: a) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 141,446
精华内容 56,578
关键字:

varchar为什么255