精华内容
下载资源
问答
  • mysql varchar计算:求列的数目和计算N的最大值有道面试题:若一张表中只有一个字段VARCHAR(N)类型,utf8编码,则N最大值为多少?先明白计算的一些规则限制① 存储限制需要额外地在长度列表上存放实际的字符长度:...

    mysql varchar计算:求列的数目和计算N的最大值

    有道面试题:若一张表中只有一个字段VARCHAR(N)类型,utf8编码,则N最大值为多少?

    先明白计算的一些规则限制

    ① 存储限制

    需要额外地在长度列表上存放实际的字符长度:小于255为1个字节,大于255则要2个字节

    ② 编码限制

    gbk:每个字符最多占用2个字节

    utf8:每个字符最多占用3个字节

    ③ 长度限制

    MySQL定义行的长度不能超过65535,这个限制了列的数目,比如char(255) utf8

    那么列的数目最多有65535/(255*3)=85,列的数目可以从这里得到依据

    行长度计算公式如下:

    row length = 1

    + (sum of column lengths)

    + (number of NULL columns + delete_flag + 7)/8

    + (number of variable-length columns)

    ① 对于MyISAM,需要额外1个位来记录值是否为NULL;对于InnoDB,没有区别

    ② 对于row_format为fixed,delete_flag为1;对于row_format=dynamic,delete_flag为0

    根据这个公式,我们便能够解答开头N的最大值:(65535-1-2)/3

    减1是因为实际存储从第2个字节开始

    减2则因为要在列表长度存储实际字符长度

    除3是因为utf8编码限制

    再来一道:

    create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;

    N的最大值:(65535-1-2-4-30*3)/3

    参考资料

    http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html

    http://dinglin.iteye.com/blog/914276

    By 迦夜

    2013-10-21

    Good Luck

    e7ce419cf2d6ad34d01da2ceb8829eed.png

    微信 赏一包辣条吧~

    023a57327877fb4402bcc76911ec18ea.png

    支付宝 赏一听可乐吧~

    展开全文
  • 写在前面关于MySQL varchar字段类型的最大值计算,也许我们一直都理解错误了,本文从问题出发,经实践验证得出一些实用经验,希望对大家的开发工作有些帮助~背景描述最近同事在做技术方案设计时候,考虑到一个表设计...

    写在前面

    关于MySQL varchar字段类型的最大值计算,也许我们一直都理解错误了,本文从问题出发,经实践验证得出一些实用经验,希望对大家的开发工作有些帮助~

    背景描述

    最近同事在做技术方案设计时候,考虑到一个表设计时希望利用varchar类型进行存储,而不是采用text,那就需要确定下varchar允许的最大长度是多少,用来评估下后期是否会遇到存储长度瓶颈。

    那问题来了:MySQL 数据库的varchar字段类型最大存储长度到底是多少?

    问题分析

    一切以官方文档为准,翻了下官方描述如下:

    In MySQL 4.1 the length is always 1 byte. In MySQL 5.0 the length may be either 1 byte (for up to 255) or 2 bytes (for 256 to 65535).

    大概意思就是说:

    在MySQL 4.1以前,长度总是1个字节(varchar(20),指的是20字节)

    在MySQL 5.0以后,长度可以是1字节(最多255个字节)或2个字节(256到65535)

    按照官网说法最大值是65535bytes,utf8mb4编码情况下每个字符占4个bytes,最大值应该为16383.75

    65535/4=16383.75

    实践验证

    到此貌似已经有了结论了,但实际情况真的是这样的么?

    我们来实验下试试看?

    mysql 版本:select version(); // 5.7

    1、若一个表只有一个varchar类型

    定义如下:

    CREATETABLE`t1` (`c`varchar(N) DEFAULTNULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    那表 t1 的`c`字段的最大长度N为多少呢?

    (65535−1−2)/4=16383

    备注:

    · 减1的原因是实际行存储从第二个字节开始;

    · 减2的原因是varchar头部的2个字节表示长度;

    · 除4的原因是字符编码是utf8mb4。

    2)若表中包含其他多种类型的情况呢

    定义如下:

    CREATETABLE`t2` (`c1`int(10) DEFAULTNULL,`c2`char(32) DEFAULTNULL,`c3`varchar(N) DEFAULTNULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    那表 t2 的`c`字段的最大长度N为多少呢?

    (65535−1−2−4−32*4)/4=16350

    备注:

    · 减1、减2的原因同上;

    · 减4的原因是int类型占用4个字节;

    · 减32*4的原因是utf8mb4编码的char类型占用4个字节(长度32)

    我们来验证一下是否如上述推断计算所述:

    1)修改t2表c3字段长度为16350

    alter table `t2` modify column `c3` varchar(16350)

    执行成功。

    2)修改t2表c3字段长度为16351

    alter table `t2` modify column `c3` varchar(16351);

    执行失败,报错信息如下:

    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.

    总结一下

    Q:varchar到底能存多少个字符?

    A:这与表使用的字符集相关,latin1、gbk、utf8、utf8mb4编码存放一个字符分别需要占1、2、3、4个字节,同时还要考虑到去除其他字段的占用影响。

    实践出真知,可以简单试一下之后再下结论。

    往期热文推荐:

    「技术架构精进」专注架构研究,技术分享

    Thanks for reading!

    展开全文
  • 要找到最大值,请MAX()与一起使用CAST(),因为这些值是VARCHAR类型。让我们首先创建一个表-mysql>createtableDemoTable2030->(->Valuevarchar(20)->);使用插入命令在表中插入一些记录-mysql>...

    要找到最大值,请MAX()与一起使用CAST(),因为这些值是VARCHAR类型。让我们首先创建一个表-mysql> create table DemoTable2030

    -> (

    -> Value varchar(20)

    -> );

    使用插入命令在表中插入一些记录-mysql> insert into DemoTable2030 values('8');

    mysql> insert into DemoTable2030 values('1');

    mysql> insert into DemoTable2030 values('10001');

    mysql> insert into DemoTable2030 values('901');

    使用select语句&miuns;显示表中的所有记录。mysql> select *from DemoTable2030

    这将产生以下输出-+-------+

    | Value |

    +-------+

    | 8     |

    | 1     |

    | 10001 |

    | 901   |

    +-------+

    4 rows in set (0.00 sec)

    以下是从VARCHAR列中查找最大值的查询-mysql> select max(cast(Value as unsigned)) from DemoTable2030;

    这将产生以下输出-+------------------------------+

    | max(cast(Value as unsigned)) |

    +------------------------------+

    | 10001                        |

    +------------------------------+

    1 row in set (0.00 sec)

    展开全文
  • 输出结果+----------------+ | Id | +----------------+ | 2019-0515-1980 | | 2019-0516-780 | | 2019-0517-2780 | +----------------+ 3 rows in set (0.00 sec) 以下是从varchar字段获取最大值的...

    为此使用MAX()方法SUBSTRING()。让我们首先创建一个表-mysql> create table DemoTable

    -> (

    -> Id varchar(200)

    -> );

    使用插入命令在表中插入一些记录-mysql> insert into DemoTable values('2019-0515-1980');

    mysql> insert into DemoTable values('2019-0516-780');

    mysql> insert into DemoTable values('2019-0517-2780');

    使用select语句显示表中的所有记录-mysql> select *from DemoTable;

    输出结果+----------------+

    | Id             |

    +----------------+

    | 2019-0515-1980 |

    | 2019-0516-780  |

    | 2019-0517-2780 |

    +----------------+

    3 rows in set (0.00 sec)

    以下是从varchar字段获取最大值的查询-mysql> select max(Id) from DemoTable

    -> where Id LIKE  CONCAT(SUBSTRING(Id, 1, 4),'%');

    输出结果+----------------+

    | max(Id)        |

    +----------------+

    | 2019-0517-2780 |

    +----------------+

    1 row in set (0.00 sec)

    展开全文
  • 有效的语句: SELECT MAX(CAST(L_UID as INTEGER)) FROM SYS_LOGGER 场景:某表的主键字段为VARCHAR,现需要获得主键的最大值 无效的语句: SELECT MAX(L_UID) FROM SYS_LOGGER ...
  • bitsCN.comMySQL varchar计算:求列的数目和计算N的最大值有道面试题:若一张表中只有一个字段VARCHAR(N)类型,utf8编码,则N最大值为多少?先明白计算的一些规则限制① 存储限制需要额外地在长度列表上存放实际的...
  • 写在前面关于MySQL varchar字段类型的最大值计算,也许我们一直都理解错误了,本文从问题出发,经实践验证得出一些实用经验,希望对大家的开发工作有些帮助~背景描述最近同事在做技术方案设计时候,考虑到一个表设计...
  • 写在前面关于MySQL varchar字段类型的最大值计算,也许我们一直都理解错误了,本文从问题出发,经实践验证得出一些实用经验,希望对大家的开发工作有些帮助~背景描述最近同事在做技术方案设计时候,考虑到一个表设计...
  • 首先表中dtime的类型是varchar(至于为何是varchar可能是领导说话“一言九鼎”吧) 表中的数据是按照dtime的倒序排序的,从中可以看到mysql再对varchar类型进行排序的时候,是按照位进行比较的。比如7>6,那么7>
  • 写在前面关于MySQL varchar字段类型的最大值计算,也许我们一直都理解错误了,本文从问题出发,经实践验证得出一些实用经验,希望对大家的开发工作有些帮助~背景描述最近同事在做技术方...
  • 先说结论,mysql 中的 varchar 是有最大长度限制的,这个是 65535 个字节。varchar(100),这个 100 的单位是啥,这个单位其实在不同版本中是不一样的。在早期低版本中代表的是字节,具体哪个版本我也没去验证了,...
  • When i tried it in query builder navicat, my query runs successfully and returns the maximum number of my field varchar. But when i tried it in my model, it gives me error of : <h1>A Database ...
  • 工作中为了方便后续扩展,建表时将数字类型定义为varchar类型进行存储,但是在排序时会乱序,这里是因为mysql默认order by 只对数字与日期类型可以排序 演示: 一、数据初始化 CREATE TABLE `testvarcharmax` ( ...
  • int(11)最大长度是多少,MySQL中varchar最大长度是多少?int(11)最大长度是多少?在SQL语句中int代表你要创建字段的类型,int代表整型,11代表字段的长度。这个11代表显示宽度,整数列的显示宽度与mysql需要用多少个...
  • 要获得最大值,请使用max()函数。让我们首先创建一个表-mysql>createtablefindMaxValueInVarcharField->(->IdintNOTNULLAUTO_INCREMENTPRIMARYKEY,->Valuevarchar(200)->);以下是使用insert命令在表...
  • mysql 获取varchar类型数字最大值

    千次阅读 2017-10-30 10:26:56
    SELECT MAX(CAST(no AS SIGNED)) FROM sys_user ;
  • 写在前面关于MySQL varchar字段类型的最大值计算,也许我们一直都理解错误了,本文从问题出发,经实践验证得出一些实用经验,希望对大家的开发工作有些帮助~背景描述最近同事在做技术方案设计时候,考虑到一个表设计...
  • 一个varchar字段直接用MAX()函数,或直接用order_by 来取最大值,那取出来的结果只会是9开头的字符串(如9,15这种情况), 想要取正确的最大值可以利用cast()函数,将varchar类型转换为integer类型。 实例: ...
  • MySQL varchar计算:求列的数目和计算N的最大值有道面试题:若一张表中只有一个字段VARCHAR(N)类型,utf8编码,则N最大值为多少?先明白计算的一些规则限制① 存储限制需要额外地在长度列表上存放实际的字符长度:...
  • 如果不转的话查询的会有问题 select MAX(CAST(userNo as SIGNED INTEGER))...————varchar 转 int cast(id as signed integer) 或者cast(id as unsigned integer) mysql无符号和有符号的区别 无符号unsigned...
  • select max(TO_NUMBER(a.id)) from table a;
  • show parameter MAX_STRING_SIZE ... extended:代表12c 32k strings新特性,varchar2、nvarchar2、raw最大长度是32767,即32kb 由数据库参数max_string_size默认是standard,所以需要修改该参数为extended,...
  • 需求:获取varchar字段类型最大值 SELECT ifnull(max(CAST(字段 AS signed)),0) from 表名 用了三个函数通过三种颜色来区分 cast 函数转换成int类型(我用了as int但是提示我不对) max 函数获取最大 ifnull 用来...
  • 有道面试题:若一张表中只有一个字段VARCHAR(N)类型,utf8编码,则N最大值为多少?先明白计算的一些规则限制4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 5.0版本以上,...
  • 也谈varchar2的最大值

    2011-02-24 17:23:52
    --可见varchar2的最大长度是4000bit。   2、char的最大长度 create table test2 (name char(2001)); --ORA-00910: specified length too long for its datatype --可见char的最大长度是2000bit。 3、varchar2的...
  • mysql中获取varchar类型数据的最大值

    千次阅读 2016-06-30 11:34:59
    select MAX(CAST(userNo as SIGNED INTEGER)) from userInfo ; 或者 select MAX(CAST(userNo as UNSIGNED INTEGER)) from userInfo ...————varchar 转 int  cast(id as signed integer) 或者 cast(id a

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,403
精华内容 561
关键字:

varchar最大值