精华内容
下载资源
问答
  • 参考:https://www.cnblogs.com/zhuyeshen/p/11642211.html

    参考:https://www.cnblogs.com/zhuyeshen/p/11642211.html

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 比如说我存储5个char,二者都是实际占用了5个char了【不准确的想法:varchar在实际存储的时候会多一个byte用来存放长度】。 但是深入一下,设计数据库的时候,二者一样吗? 答案是否定的【至少varchar类型需要在数据...

    参考:https://www.cnblogs.com/zhuyeshen/p/11642211.html

    1、varchar(100)和varchar(10)的区别在哪里?

    一般初学会认为,二者占用的空间是一样的。比如说我存储5个char,二者都是实际占用了5个char了【不准确的想法:varchar在实际存储的时候会多一个byte用来存放长度】。
    但是深入一下,设计数据库的时候,二者一样吗?
    答案是否定的【至少varchar类型需要在数据之前利用一个或者两个字节来存储数据的长度】并且二者在内存中的操作方式也是不同的,下面的例子中有体现(例子链接:看下面的例子。 )
    如现在用户需要存储一个地址信息。根据评估,只要使用100个字符就可以了。但是有些数据库管理员会认为,反正Varchar数据类型是根据实际的需要来分配长度的。还不如给其大一点的呢。为此他们可能会为这个字段一次性分配200个字符的存储空间。这VARCHAR(100)与VARCHAR(200)真的相同吗?

    结果是否定的。虽然他们用来存储90个字符的数据,其存储空间相同。但是对于内存的消耗是不同的。对于VARCHAR数据类型来说,硬盘上的存储空间虽然都是根据实际字符长度来分配存储空间的,但是对于内存来说,则不是。其时使用固定大小的内存块来保存值。简单的说,就是使用字符类型中定义的长度,即200个字符空间。显然,这对于排序或者临时表(这些内容都需要通过内存来实现)作业会产生比较大的不利影响。解释可以参见这里。如果不想看解释,我这里大概说下:假设VARCHAR(100)与VARCHAR(200)类型,实际存90个字符,它不会对存储端产生影响(就是实际占用硬盘是一样的)。但是,它确实会对查询产生影响,因为当MySql创建临时表(SORT,ORDER等)时,VARCHAR会转换为CHAR,转换后的CHAR的长度就是varchar的长度,在内存中的空间就变大了,在排序、统计时候需要扫描的就越多,时间就越久。

    所以如果某些字段会涉及到文件排序或者基于磁盘的临时表时,分配VARCHAR数据类型时仍然不能够太过于慷慨。还是要评估实际需要的长度,然后选择一个最长的字段来设置字符长度。如果为了考虑冗余,可以留10%左右的字符长度。千万不能认为其为根据实际长度来分配存储空间,而随意的分配长度,或者说干脆使用最大的字符长度。
    ----------------------------------char------------------------------------------
    1、从碎片角度进行考虑,使用CHAR字符型时,由于存储空间都是一次性分配的。为此某个字段的内容,其都是存储在一起的。单从这个角度来讲,其不存在碎片的困扰。而可变长度的字符数据类型,其存储的长度是可变的。当其更改前后数据长度不一致时,就不可避免的会出现碎片的问题。故使用可变长度的字符型数据时,数据库管理员要时不时的对碎片进行整理。如执行数据库导出导入作业,来消除碎片。
    2、考虑其长度的是否相近,如果某个字段其长度虽然比较长,但是其长度总是近似的,如一般在90个到100个字符之间,甚至是相同的长度。此时比较适合采用CHAR字符类型。比较典型的应用就是MD5哈希值。当利用MD5哈希值来存储用户密码时,就非常使用采用CHAR字符类型。因为其长度是相同的。另外,像用来存储用户的身份证号码等等,一般也建议使用CHAR类型的数据。
    另外请大家考虑一个问题,CHAR(1)与VARCHAR(1)两这个定义,会有什么区别呢?虽然这两个都只能够用来保存单个的字符,但是VARCHAR要比CHAR多占用一个存储位置。这主要是因为使用VARCHAR数据类型时,会多用1个字节用来存储长度信息。这个管理上的开销char字符类型是没有的。

    总结

    二者在磁盘上存储占的空间是一样的。区别有二。第一、一个变长一个固定长度。第二、在内存中的操作方式,varchar也是按照最长的方式在内存中进行操作的。比如说要进行排序的时候,varcahr(100)是按照100这个长度来进行的。

    2、varchar能存多少汉字、数字?

    具体还是要看版本的,一个字符占用3个字节 ,一个汉字(包括数字)占用3个字节=一个字符

    4.0版本以下,varchar(100),指的是100字节,如果存放UTF8汉字时,只能存33个(每个汉字3字节)

    5.0版本以上,varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放100个。

    UTF8编码中一个汉字(包括数字)占用3个字节

    GBK编码中一个汉字(包括数字)占用2个字节

    3、varchar的最大长度是多少呢?

    mysql的vachar字段的类型虽然最大长度是65535,但是并不是能存这么多数据,最大可以到65533,其中需要1到2个字节来存储数据长度(如果列声明的长度超过255,则使用两个字节来存储长度,否则1个)字节,当不允许非空字段的时候(因为要用一个字节来存储不可为空的标识),当允许非空字段的时候只能到65532(省下了存储非空的那个字节)。

    行中可以用的字节数如下计算:(参考文档:https://www.jianshu.com/p/ee1e4b14c5e7 )

    字段非空时候:varchar(65535) -2 bytes (存储长度,按2个算) - 1byte (latin1类型) - 1 (null byte)=65531 字节可以用

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

    字段可以空时候:varchar(65535) -2 bytes (存储长度,按2个算) - 1byte (latin1类型) =65532 字节可以用

    根据这个最大字节数,以及编码方式,可以计算能存储的汉字数。

    4、字符、字节、位,之间的关系?

    1、位:
    数据存储的最小单位。每个二进制数字0或者1就是1个位;

    2、字节:
    8个位构成一个字节;

    即:1 byte (字节)= 8 bit(位);

    1 KB = 1024 B(字节);
    1 MB = 1024 KB; (2^10 B)
    1 GB = 1024 MB; (2^20 B)
    1 TB = 1024 GB; (2^30 B)

    3、字符:

    a、A、中、+、*、の…均表示一个字符;
    一般 utf-8 编码下,一个汉字 字符 占用 3 个 字节;数字属于汉字,和汉字占用一样字节。
    一般 gbk 编码下,一个汉字 字符 占用 2 个 字节;

    展开全文
  • https://www.cnblogs.com/zhuyeshen/p/11642211.html

    https://www.cnblogs.com/zhuyeshen/p/11642211.html

    展开全文
  • VarChar能存储多少个值

    2020-12-18 10:00:31
    参考链接:MySQL 数据库 varchar 到底可以存多少汉字多少个英文 首先我们需要了解utf-8和GBK的区别,因为不同的编码格所占的字节数是不同的 中文 英文 utf-8 1~3个字节 1个字节 GBK 2个字节 1个字节 ...

    参考链接:MySQL 数据库 varchar 到底可以存多少个汉字,多少个英文
    首先我们需要了解utf-8和GBK的区别,因为不同的编码格所占的字节数是不同的

    中文英文
    utf-81~3个字节1个字节
    GBK2个字节1个字节
    Utf-8mb4(兼容utf-8)1~4位字节(mysql5.5之后,能用更多字符表示数据)1个字节

    VarChar(n) 代表能存储n个字符,即不管是英文还是汉字都能存储n个,不同的是存储用的字节数

    关于mysql能存多少值

    • mysql的记录行长度是有限制的,不是无限长的,这个长度是64K,即65535个字节,对所有的表都是一样的。

    这个65535是指整行的长度,如果当前行还有其他字段总的字节数也会被占用。像blob和text类型是内容与行的其余部分分开存储,所以在行中存储的只有9~12个字节

    • MySQL对于变长类型的字段会有1-2个字节来保存字符长度。
    • 当字符数小于等于255时,MySQL只用1个字节来记录,因为2的8次方减1只能存到255。
    • 当字符数多余255时,就得用2个字节来存长度了。
    • utf-8状态下的varchar,最大只能到 (65535 - 2) / 3 = 21844 余 1。
    • gbk状态下的varchar, 最大只能到 (65535 - 2) / 2 = 32766 余 1。
    展开全文
  • 2、varchar能存多少汉字、数字? 3、varchar的最大长度是多少呢? 4、字符、字节、位,之间的关系? 5、mysql字段类型存储需要多少字节? 接下来请仔细看,整理不易啊。 1、varchar(100)和varchar(10)的区别在...
  • 4.0版本以下,varchar(100),指的是100字节,如果存放UTF8汉字时,只能33个(每个汉字3字节) 5.0版本以上,varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放100个...
  • 在设计数据库的时候会考虑给字段设置什么类型,设置多少长度合适,之前一直认为varchar(2)可以存储一个汉字,或者一个数字,通过今天无意间的查询,发现了这个错误,来记下来 其实varchar类型可以存储多少汉字...
  • mysql中varchar(20)最多能存多少汉字

    千次阅读 2019-05-14 10:15:00
    4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能6个(每个汉字3字节) 5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个 ...
  • 4.0 版本以下,varchar(100),指的是100字节,如果存放UTF8汉字时,只能33个(每个汉字3字节) 5.0 版本以上,varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放100...
  • 一、关于 UTF-8 UTF-8Unicode Transformation Format-8bit。是用以解决国际上字符的一种多字节编码。 它对英文使用 8 位(即一个字节) ,中文使用 24 位(三个... 如果是UTF8编码,则在外国人的英文 IE 也显示中.
  • varchar(50),指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个其实最好的办法是在自己数据库中建个表试试可以放多少汉字,现在mysql都5.0已上了,varchar(50)是可以50个汉字...
  • 首先要确定mysql版本 4.0版本以下,varchar(50),指的是50字节,如果存放UTF8汉字时,只能...其实最好的办法是在自己数据库中建个表试试可以放多少汉字,现在mysql都5.0已上了,varchar(50)是可以50个汉字的 ...
  • mysql varchar到底能存多少字符。

    千次阅读 2018-06-27 14:31:00
    utf8编码的varchar  Mysql记录行数据是有限的。大小为64k,即65535个字节,而varchar要用1-2字节来存储字段长度,小于255的1字节,大于255的... 第一,当编码方式为utf-8时,varchar存到21845就存不下了.也就是最大...
  • mysql数据类型(主要讲tinyint int varchar) 1 整形字段 tinyint(1字节)、smallint(2字节)、mediumint(3字节)、int(4)和bigint(8) tinyint(1)中的1到底是啥意思 int(11)中的11又到底是什么? 我先创建一张表来实战...
  • varchar(100)可以存多少中文字符

    万次阅读 2019-03-06 16:12:19
    4.0版本以下,varchar(100),指的是100字节,如果存放UTF8汉字时,只能33个(每个汉字3字节) 5.0版本以上,varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放100个...
  • Oracle 中 varchar2 到底能存多少汉字: 原文链接:https://www.cnblogs.com/firstgreen/p/3586301.html 1. varchar2最大长度为4000字节。 2. varchar2的参数有两个:byte(默认), char 其中varchar2(10 ...
  • 它对英文使用8位(即一个字节) ,中文使用24位(三个字节)来编码。 UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。 UTF-8编码的文字可以在各国支持UTF8字符集额的浏览器上显示。 如果是UTF8
  • mysql varchar到底能存多少汉字

    千次阅读 2016-09-22 01:35:28
    在utf-8状态下,汉字最多可以 21844个字符串, 英文也为 21844个字符串。 在gbk状态下,汉字最多可以 32766个字符串,英文也为 32766个字符串。
  • 它对英文使用8位(即一个字节) ,中文使用24位(三个字节)来编码。 UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。 UTF-8编码的文字可以在各国支持UTF8字符集额的浏览器上显示。 如果是...
  • varchar255可以存多少汉字

    万次阅读 2016-05-25 16:24:29
    4.1: VARCHAR以字节为单位存储,所以假设全部为常用汉字(UTF-8 3字节编码长度),则VARCHAR(255)共可存放约85个汉字; MySQL | ver >= 4.1: VARCHAR以字符为单位存储,假设输入仍然为常用汉字,则VARCHAR...
  • 标题:MYSQL字段的长度varchar类型能存多少中文字符 MySQL | ver < 4.1: VARCHAR以字节为单位存储,所以假设全部为常用汉字(UTF-8 3字节编码长度),则VARCHAR(255)共可存放约85个汉字; MySQL | ver >= ...
  • MySQL中VARCHAR(n)最多能存多少汉字

    千次阅读 2018-08-01 17:50:12
    如果存放的汉字为UTF8编码时(utf8编码每个汉字占3字节),则只能16个汉字。 (2)MySQL 5.0 版本以上,VARCHER(n)中的 n 指的是 n 个字符(英文字母、汉字、符号都是字符)。无论存放的是数字、字母还是UTF8汉字...
  • Mysql 的varchar能存几个字符?

    千次阅读 2020-11-30 17:48:50
    utf8编码的varchar  Mysql记录行数据是有限的。... 第一,当编码方式为utf-8时,varchar存到21845就存不下了.也就是最大长度是21844.根据上面信息可以推算出 ( 65535-2 )/3=21844余1  例子如下:  
  • 每个汉字占3个字节 所以最多能存66个,67个及以上不行,会报如下错误。 [2021-07-21 14:40:45] [22001] 错误: 对于可变字符类型来说,值太长了(200)
  • MySQL 数据库 varchar 到底可以存多少汉字多少个英文呢?我们来搞搞清楚 转载,原文地址:https://www.cnblogs.com/printN/p/7252490.html 一、关于UTF-8 UTF-8 Unicode Transformation Format-8bit。是用以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 117,383
精华内容 46,953
关键字:

varchar能存多少汉字