精华内容
下载资源
问答
  • 字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。 字符(Character)计算机中使用的字母、数字、字和符号,比如'A'、'B'、'$'、'&'等。 一般...

    一、先了解字节与字符

    1. 字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。
    2. 字符(Character)计算机中使用的字母、数字、字和符号,比如'A'、'B'、'$'、'&',1、2、3、~!·#、¥、%、…、*、(、)—、+、'汉字'等等。

    一般在英文状态下一个字母或字符占用一个字节,一个汉字用两个字节表示。

    字节与字符

    • ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。
    • UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。
    • Unicode 编码中,一个英文为一个字节,一个中文为两个字节。
    • 符号:英文标点为一个字节,中文标点为两个字节。例如:英文句号 . 占1个字节的大小,中文句号 。占2个字节的大小。
    • UTF-16 编码中,一个英文字母字符或一个汉字字符存储都需要 2 个字节(Unicode 扩展区的一些汉字存储需要 4 个字节)。
    • UTF-32 编码中,世界上任何字符的存储都需要 4 个字节。

    单位换算

    • 计算机存储信息的最小单位,称之为位(bit),音译为比特,二进制的一个“0”或一个“1”叫一位。
    • 计算机存储容量基本单位是字节(Byte),音译为拜特,8个二进制位组成1个字节。一般而言:一个标准英文字母占一个字节位置,一个标准汉字占二个字节位置。
    • 计算机存储容量大小以字节数来度量,1024进位制:

      1024B=1K(千)B
      1024KB=1M(兆)B
      1024MB=1G(吉)B
      1024GB=1T(太)B
      以下还有PB、EB、ZB、YB 、NB、DB,一般人不常使用了。

    二、mysql数据库中varchar的长度与字节、字符的关系

    准备sql脚本:

    CREATE TABLE `test` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `content` varchar(5) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    insert into test (id, content) values(default, 'abcde');
    insert into test (id, content) values(default, '12345');
    insert into test (id, content) values(default, '!@#$%');
    insert into test (id, content) values(default, '你好就是我');
    
    select * from test;
    
    
    #查看mysql版本号
    select version();
    

    分析:四条语句(英文字母/数字/字符/中文)都能正确插入(当前mysql版本号8),查询结果如下:

    mysql版本号:

    三、结论

    mysql里的varchar是字符单位,无论内容是英文、数字、字符、中文,都能插入。

    四、拓展

    varchar存储规则:

    • mysql4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 。
    • mysql5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个。

    varchar与char区别:

    • CHAR:固定长度的类型,若输入数据的字符小于指定长度,则系统自动在其后添加空格来填满设定好的空间。
    • VARCHAR:可变长度的类型。数据类型的存储长度为实际数值长度,字符的长度小于指定长度,不会用空格填充。

    timestamp与datetime存储的时间范围:
          timestamp所能存储的时间范围为:’1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’。

          datetime所能存储的时间范围为:’1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。

    参考文章:https://www.runoob.com/w3cnote/byte-character.html

    展开全文
  • 达梦数据库字符集与varchar长度单位选择 在学习这之前我们先介绍达梦数据库中两个重要参数。 LENGTH_IN_CHAR:VARCHAR 类型对象的长度是否以字符为单位。1:是,设置为以字符为单位时,定义长度并非真正按照字符长度...

    达梦数据库字符集与varchar长度单位选择

    在学习这之前我们先介绍达梦数据库中两个重要参数。
    LENGTH_IN_CHAR:VARCHAR 类型对象的长度是否以字符为单位。1:是,设置为以字符为单位时,定义长度并非真正按照字符长度调整,而是将存储长度值按照理论字符长度进行放大。所以会出现实际可插入字符数超过定义长度的情况,这种情况也是允许的。同时,存储的字节长度 8188 上限仍然不变,也就是说,即使定义列长度为8188 字符,其实际能插入的字符串占用总字节长度仍然不能超过 8188;0:否,所有 VARCHAR 类型对象的长度以字节为单位。其取值 0 或 1。默认值为 0
    CHARSET(UNICODE_FLAG):字符集选项。0 代表 GB18030,1 代表UTF-8,2 代表韩文字符集 EUC-KR。(这里只讨论前两种类型)

    varchar数据类型是指的非定长字符串,用法类似char数据类型,可以指定一个不超过8188的正整数作为字符长度,例如:varchar(100)。如果未指定长度,缺省为8188。在基表中,当没有指定USINGLONG ROW 存储选项时,插入varchar数据类型的实际最大存储长度由数据库页面大小决定。
    在使用DMINIT初始化数据库的时候,有两个参数CHARSET和LENGTH_IN_CHAR跟字符集相关。
    CHARSET:此参数表示了数据库中所有数据的字符集,包括数据字典的字符集。需要注意的是,数据库一旦初始化完成,字符集就将无法修改。我们可以使用select unicode来查询当前数据库的字符集种类,0代表gb18030,1代表UTF8。
    LENGTH_IN_CHAR:此参数决定了,数据库中的varchar类型对象的长度是否以字符为单位。取值为1则设置为以字符为单位,将存储长度值按照理论字符长度进行放大。取值为0则所有varchar类型对象的长度以字节为单位。

    1.LENGTH_IN_CHAR=0,CHARSET=1(字符集是utf-8,长度以字节为单位)

    create table test(ca varchar(1));
    insert into test values('1');
    insert into test values('我'); -- 列[NAME]长度超出定义.
    

    查看表数据、数据长度和字节长度

    select ca,LENGTH(ca),LENGTHB(ca) from test;
    

    在这里插入图片描述

    create table test(ca varchar(3));
    insert into test values('aaa');
    insert into test values('我');
    insert into test values('我们'); -- 列[NAME]长度超出定义.
    

    查看表数据、数据长度和字节长度

    select ca,LENGTH(ca),LENGTHB(ca) from test;
    

    在这里插入图片描述

    小结:当字符集为utf-8,长度以字节为单位时,一个汉字占三个字节,一个英文字母占一个字节。

    2.LENGTH_IN_CHAR=1,CHARSET=1(字符集是utf-8,长度以字符为单位)

    create table test(ca varchar(1));
    insert into test values('a');
    insert into test values('aaa');
    insert into test values('aaaa');
    insert into test values('aaaaa'); -- 列[NAME]长度超出定义.
    insert into test values('我');
    insert into test values('我们'); -- 列[NAME]长度超出定义.
    

    查看表数据、数据长度和字节长度

    select ca,LENGTH(ca),LENGTHB(ca) from test;
    

    在这里插入图片描述

    小结:当字符集为utf-8,长度以字符为单位时,一个汉字占三个字节,一个英文字母占一个字节,一个字符四个字节(即一个varchar单位占四个字节),可以存四个英文字母。

    3.LENGTH_IN_CHAR=1,CHARSET=0(字符集是gb18030,长度以字符为单位)

    create table test(name varchar(3));
    insert into test values('我');
    insert into test values('我们');
    insert into test values('我们的');
    insert into test values('我们的家');-- 列[NAME]长度超出定义.
    insert into test values('aaa');
    insert into test values('aaaab');
    insert into test values('aaaabb');
    insert into test values('aaaabbb');-- 列[NAME]长度超出定义.
    

    查看表数据、数据长度和字节长度

    select name,LENGTH(name),LENGTHB(name) from test;
    

    在这里插入图片描述

    小结:当字符集为gb18030,长度以字符为单位时,一个汉字占两个字节一个字符,一个英文字母占一个字节,一个字符可以存一个汉字或者两个英文字母。

    4.LENGTH_IN_CHAR=0,CHARSET=0(字符集是gb18030,长度以字节为单位)

    create table test(name varchar(3));
    insert into test values('我');
    insert into test values('aaa');
    insert into test values('我们');-- 列[NAME]长度超出定义.
    insert into test values('我们的');-- 列[NAME]长度超出定义.
    

    查看表数据、数据长度和字节长度

    select name,LENGTH(name),LENGTHB(name) from test;
    

    小结:当字符集为gb18030,长度以字节为单位时,一个汉字占两个字节,一个英文字母占一个字节。

    由此可见,在达梦数据库中以utf-8为字符集时,一个字符=四个字节,一个英文字母占一个字节,一个汉字占三个字节;以gb18030为字符集时,一个字符=两个字节,一个英文字母占一个字节,一个汉字占两个字节。

    展开全文
  • 主要介绍了探究MySQL中varchar的定义长度,文中主要对其长度究竟是字节还是字符做出了相关实验,需要的朋友可以参考下
  • 使用oracle时,会这样忽略一个问题:oracle中varchar2类型的字段长度单位不指定类型时,按照byte来定义。 如果数据库使用的字符集是GBK,GB2312或者其他定长字符集的话,这个问题似乎可以被忽略,因为只要把数据库的...

    1、背景

    使用oracle时,会这样忽略一个问题:oracle中varchar2类型的字段长度单位不指定类型时,按照byte来定义。

    如果数据库使用的字符集是GBK,GB2312或者其他定长字符集的话,这个问题似乎可以被忽略,因为只要把数据库的字段长度/2就可以得到你要限制插入该字段的中文长度了。但是,如果数据库的字符集是UTF-8呢,它可是变长的。

    有人说数据库字段长度/3,这是一定不可取的,因为UTF-8是变长表示的,平均为3byte表示一个字符,而并不是一定用3byte。

    其实人家oracle没这么笨,本来就可以用字符为单位来定义varchar2的长度的,这个时候需要注意在建表时这样写:

    create table ABC_TABLE (A_FIELD varchar2(20 char))  

    2、Length与LengthB比较

    lengthb(string)计算string所占的字节长度 :返回字符串的长度,单位是字节.

    SELECT LENGTHB('我们w') FROM DUAL 

    这里写图片描述

    length(string)计算string所占的字符长度 :返回字符串的长度,单位是字符.

    SELECT LENGTH('我们w') FROM DUAL  

    这里写图片描述

    3、引用

    http://doingwell.iteye.com/blog/972938

    https://www.cnblogs.com/love540376/p/6707974.html

    展开全文
  • 比如常见写法varchar2(10) 代表只接收最大10字节长度 这种定义情况下10字节只能插入3个汉字,(数字字母只占一字节,汉字占三字节) 如果插入4个汉字会报ORA-12899错误,提示超过长度 2、可自定义为字符:VARCHAR2...

    1、默认为字节:byte

    比如常见写法varchar2(10) 代表只接收最大10字节长度

    这种定义情况下10字节只能插入3个汉字,(数字字母只占一字节,汉字占三字节)在这里插入图片描述

    如果插入4个汉字会报ORA-12899错误,提示超过长度

    在这里插入图片描述

    2、可自定义为字符:VARCHAR2(10 char)

    测试建表语句

    CREATE TABLE tUsers1(
         UserName VARCHAR2(10 char)
     ); 
    

    插入测试数据

    INSERT INTO tUsers1(UserName) VALUES('我是中国人我是中国人');
    INSERT INTO tUsers1(UserName)VALUES('你好123');
    

    查询长度会发现oracle中一个汉字占用3个字节

     SELECT lengthb(username),username  FROM tUsers1	
    

    测试效果如下:我们可以看见字段定义为varchar(10 char) 可以插入10个字符(包括汉字),占用最多到30 byte!

    在这里插入图片描述

    另附:

    查询字符集:

    select * from v$nls_parameters t where t.PARAMETER='NLS_CHARACTERSET';
    

    Length与LengthB比较

    lengthb(string)计算string所占的字节长度
    
    length(string)计算string所占的字符长度
    

    MySql

    5.X 以上的版本的定义中表示的字符长度,如上varchar(20)你既可以添加20个英文字符,也可以添加二十个中文字符.

    4.X 的版本表示的是字节长度,会根据字符集转变内容字节长度存储。

    int(2) 中的2 ,表示的并非是int类型只能输入2位数字,而是只能显示2位数字范围,可以添加11位的int的任何数字。

    SqlServer

    2008中

    select len(‘深圳市中民时代广场B座九楼’) --13
    select datalength(‘深圳市中民时代广场B座九楼’) --25

    展开全文
  • 各个数据库对varchar类型的长度定义是不大一样的,拿DM举例,varchar类型长度上限和数据库页大小和表的定义有关,而且最大上限不超过8188字节。具体不同页大小设置对varchar大小上限的影响可以看我的另一篇博客...
  • mysql varchar类型求和实例操作有的小伙伴在学习数据库的时候,创建表结构的时候不小心把某字段设置成了varchar但是在统计求和的时候就傻眼了,接下来跟着小编学习一下,不用改该列数据类型也能求和的方法吧!...
  • 其中表的一个字段在mysql中设置为varchar(6),Oracle中为varchar2(6),但mysql中能正常存放的数据同步到oracle中却抱ORA-12899: value too large for column错误。这是为什么呢? mysql中varchar(6)代表可以存放6个...
  • 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 ...
  • [img]...调整表的CHAR/VARCHAR2字段的Byte为CHAR 使用如下SQL脚本即可: set serveroutput on DECLARE sqlstr varchar2...
  • 支持超过4000字节的varchar2类型

    千次阅读 2021-04-14 00:19:12
    Oracle中最常用的字符串类型可能就是varchar2了,但是一直以来,让人吐槽最多的,可能就是他的存储容量,12c之前,允许存储4000字节,请注意这的单位是字节,如果你按照非常规的字...
  • varchar(100),这个 100 的单位是啥,这个单位其实在不同版本中是不一样的。在早期低版本中代表的是字节,具体哪个版本我也没去验证了,后来被改成了字符,不过可以肯定的是在 5.1 版本后, varchar(100) 就是指 100...
  • varchar定义的长度的单位是字符 ,哪怕是1个多字节字符也是1个字符,如中文和英文字母都被当作1个字符来对待。 那么**varchar能够定义的最大长度是多少呢?**这个和你当前所使用的字符集有关。 抛开字符,其最大...
  • mysql varchar(255) 浅谈

    2021-01-19 03:14:01
    有没有觉得我们设置varchar长度的时候,很多时候都设置成255,这是为什么呢?其实是因为在5.5.3版本之前InnoDB存储引擎的表索引的前缀长度最长是767字节(bytes),MyIsam存储引擎的表索引的前缀长度最长是1000字节...
  • I have seen that SQL developers use varchar(max) data while designing the tables or temporary tables. We might not be sure about the data length, or we want to eliminate the string or binary trunc...
  • MySql中varchar长度的设置问题

    千次阅读 2021-01-18 22:37:31
    根据自己多年的工作经验,特别是在接收旧的项目时,varcahr的长度设置有不同的风格,针对varchar长度的设置问题,自己划分了不同的门派。1.强迫症派:长度设置为4或者8的倍数,达到内存对齐的目的;2.贴心派:长度...
  • 最近有几个同学问我varchar和text有啥别吗,这个问题,以前说真的也没太多的整理,以前遇到text在设计中就是尽可能的拆到另一个表中,保持主表尽量的瘦小,可以让innodb bp缓存更多的数据。今天借次机会系统整理一下...
  • SQL varchar数据类型深入探讨

    千次阅读 2020-07-26 08:33:42
    In this article we’ll review the SQL varchar data type including a basic definition and overview, differences from varchar(n), UTF-8 support, Collation, performance considerations and more. ...
  • mysql varchar长度的含义

    2021-01-30 12:29:48
    然后去现在要插入的表中查,发现最长竟然达到46,可以超过mysql自己定义的长度,查了一圈发现了真相: 原来Mysql中varchar(n)和char(n)表示n个字符,无论汉字和英文,Mysql都能存入n个字符,仅是实际字节长度有所...
  • char和varchar的区别

    2021-01-04 12:33:54
    字符与字节的区别 字符和字节的对应关系是不同的。 一般来说,半角英文状态下... 字符,在计算机和电信技术中,一个字符是一个单位的字形、类字形单位或符号的基本信息。 字符是指计算机中使用的字母、数字、字
  • 4.1: VARCHAR以字节为单位存储,所以假设全部为常用汉字(UTF-8 3字节编码长度),则VARCHAR(255)共可存放约85个汉字; MySQL | ver >= 4.1: VARCHAR以字符为单位存储,假设输入仍然为常用汉字,则VARCHAR...
  • 文章目录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.1: VARCHAR以字节为单位存储,所以假设全部为常用汉字(UTF-83字节编码长度),则VARCHAR(255)共可存放约85个汉字;MySQL | ver >= 4.1:VARCHAR以字符为单位存储,假设输入仍然为常用汉字,则VARCHAR(255)可以...
  • 1、varchar(100)和varchar(10)的区别在哪里? 2、varchar能存多少汉字、数字? 3、varchar的最大长度是多少呢? 4、字符、字节、位,之间的关系? 5、mysql字段类型存储需要多少字节? 接下来请仔细看,整理...
  • 达梦数据库varchar类型长度解析

    千次阅读 2020-04-03 23:37:46
    我们在数据迁移或是往数据表中导入中文字符时,经常会出现varchar类型超过字符长度的报错,可是我们一看长度是够啊,怎么会报错,错在那里?今天我们就来分析一下varchar数据类型长度的占比。 在说varchar类型之前...
  • 我创建了一个带有UTF-8 VARCHAR(5000)的表,并用数据填充它.但看起来这个字段允许的数据超出了指示范围:mysql> DESCRIBE test;+---------+------------------+------+-----+---------+----------------+| Field |...
  • 说明:IDE与数据库字段字符字符集均为UTF-8,MySQl版本5.7.x,JDK1.8.x在设计...先说结论:最长长度即调用java字符串的length方法返回的结果,即数据库字段的长度单位为 字符----------------------------------...
  • mysql中varchar与oracle中varchar2区别

    千次阅读 2019-01-03 15:12:23
    字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。 (二)“字符”的定义 字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+...
  • 根据自己多年的工作经验,特别是在接收旧的项目时,varcahr的长度设置有不同的风格,针对varchar长度的设置问题,自己划分了不同的门派。 1.强迫症派:长度设置为4或者8的倍数,达到内存对齐的目的; 2.贴心派:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,050
精华内容 24,020
关键字:

varchar单位