精华内容
下载资源
问答
  • utf8编码的varcharMysql记录行数据是有限的。大小为64k,即65535个字节,而varchar要用1-2字节来存储字段长度,小于255的1字节,...第一,当编码方式为utf-8时,varchar存到21845就存不下了.也就是最大长度是21844....

    utf8编码的varchar

    Mysql记录行数据是有限的。大小为64k,即65535个字节,而varchar要用1-2字节来存储字段长度,小于255的1字节,大于255的2字节。

    Mysql 5.0后,英文字符固定都是一个字节,汉字字符根据编码方式占不同字节,Utf-8占3个字节,gbk占了2个字节。

    第一,当编码方式为utf-8时,varchar存到21845就存不下了.也就是最大长度是21844.根据上面信息可以推算出 ( 65535-2 )/3=21844余1

    例子如下:

    ba7bafda5e07073e06f69564f027f5da.png

    9fc4f82a381964cf7b95e2c08a523dcf.png

    GBK编码的varchar

    当编码格式为GBK时,varchar能存多少字符呢?经过推理可知大约能存32766个字符,(65535-2)/2=32766余1。

    那么看看实验结果如下:

    e637c4b7e90226e7eb9eef76360dca52.png

    2b4397794de8bd1fbc8f9ffe42d0037f.png

    为何提出这个问题?

    前段时间一个哥们提bug,要把备注等字段全部最大大小设置为1000,甚至更多,这个表的字段本身就已经很多了,而我们设计表时一般都默认使用utf8这个编码格式,那么一个汉字就占了3个字节,故一个行记录的长度就会短了些,数据占用存储资源也会多了些,然后修改的时候成功的报了row size too large的这个错误。这里提出来也是为了让大家注意下。

    总结

    设计表的时候不同的编码格式会导致varchar的最大值发生变化,varchar(数值),这个数值指的是字符数,也可以说是一个字,但是不是字节,当然存储的数据还是一个英文占一个字节,一个汉字根据编码格式占不同字节。

    展开全文
  • 你好,我是李辉。这是专栏的第一篇文章,在专栏的前几个小节,我会先和你先聊一聊 MySQL 的数据...这一小节我们就先来说说在数据建模设计时使用非常频繁的字符串类型 – VARCHAR。为了在阅读时不引起歧义,本专栏...

    你好,我是李辉。

    这是专栏的第一篇文章,在专栏的前几个小节,我会先和你先聊一聊 MySQL 的数据类型。了解 MySQL 的数据类型是开发人员在使用 MySQL 数据库的时候,必备的基础技能之一。也正因为此,这部分知识也是面试官面试的时候屡屡提及的高频问题,所以尽量不要在这个地方栽跟头。这一小节我们就先来说说在数据建模设计时使用非常频繁的字符串类型 – VARCHAR。

    为了在阅读时不引起歧义,本专栏中我们先做一个简单的约定:

    MySQL 数据库版本 5.7

    使用 InnoDB 存储引擎

    默认隔离级别是 Repeatable Read

    默认使用 UTF8 编码

    本专栏中的所有文章都使用上述约定,有不同的地方我们再单独做说明。

    1. VARCHAR (50) 中的 50 到底是能存 50 个字还是 50 个字节?

    我们先做个简单的实验:

    mysql> create database imooc_mysql_interview;

    Query OK, 1 row affected (0.00 sec)

    mysql> use imooc_mysql_interview

    Database changed

    mysql> create table varchar_test(col_1 varchar(8));

    Query OK, 0 rows affected (0.01 sec)

    mysql> insert into varchar_test values('ABCDEFGH'),('数一数是不是八个');

    Query OK, 2 rows affected (0.01 sec)

    Records: 2 Duplicates: 0 Warnings: 0

    mysql> select * from varchar_test;

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

    | col_1 |

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

    | ABCDEFGH |

    | 数一数是不是八个 |

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

    2 rows in set (0.00 sec)

    从上述实验的结果可知,显然是能存 8 个字符而不是 8 个字节,也就是说 VARCHAR 的括号中的数字代表的是字符。如果存的是字节,由于中文、英文和 emoji 在 utf-8 中的字节数都不一样,势必会给编程造成一定的困扰。

    1.1 CHAR (50) 和 VARCHAR (50) 有什么区别?

    刚工作不久的同学可能会有这个疑问,为什么大家都喜欢用 VARCHAR,CHAR 却很少见,存的长度不是都一样吗?

    首先要说明的一点,CHAR 和 VARCHAR 在存储方式上存在着差异:CHAR 是定长字符,MySQL 数据库会根据建表时定义的长度给它分配相应的存储空间。而 VARCHAR 是可变长度字符的数据类型,在存储时只使用必要的空间。

    举个例子,假如一张表上有两列,分别是 CHAR (20) 和 VARCHAR (20),我们插入一个字符串 “abcd”,在数据库中存储时,CHAR 会使用全部的 20 个字符的长度,不足的部分用空格填充,而 VARCHAR 仅仅就只使用 4 个字符的长度。

    其次,由于 CHAR 数据类型的这个特性,在将数据写入表中时,如果字符串尾部存在空格,会被自动删除,而 VARCHAR 数据类型会保留这个空格。在一些特殊场景中要注意这个问题。所以推荐你使用 CHAR 数据类型存储一些固定长度的字符串,比如身份证号、手机号、性别等。

    最后,CHAR 和 VARCHAR 的存储长度不同。CHAR 数据类型可定义的最大长度是 255 个字符,而 VARCHAR 根据所使用的字符集不同,最大可以使用 65535 个字节。注意我刚说的 VARCHAR 的最大长度不是字符数而是字节数,那么新的问题来了,我们接着往下看。

    2. VARCHAR 能使用的最大长度是多少?

    由于 VARCHAR 能存储的最大长度会因为你在表定义中使用的字符集不同而发生变化,下面我们就以业内使用较多的 UTF8 这个字符集作为前提条件来做个分析。

    我们再看一个例子:

    mysql> create table varchar_test2(col_1 varchar(65535))charset=utf8 engine=innodb;

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

    mysql> create table varchar_test2(col_1 varchar(21845))charset=utf8 engine=innodb;

    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

    mysql> create table varchar_test2(col_1 varchar(21844))charset=utf8 engine=innodb;

    Query OK, 0 rows affected (0.02 sec)

    由于 UTF8 字符集中一个汉字占用 3 个字节,因此我们能创建的最大长度理论上应该是 21845(65535/3=21845)。但是为什么 varchar (21845) 仍然报错,而使用 varchar (21844) 却创建成功?

    这是因为触及了 MySQL 数据库定义的 VARCHAR 的最大行长度限制。

    虽然 MySQL 官方定义了最大行长度是 65535 个字节,但是因为还有别的开销,我们能使用的最大行长度只有 65532。

    刚刚的实验中,我们把 VARCHAR 的字段长度改成 21844 后腾出来 3 个字节 (65535-21844*3=3),因此可以创建成功。

    因此在使用了 UTF-8 的字符集时,VARCHAR 的最大长度为 21844。

    另外提醒你注意一下,做表设计时不要肆意的放飞自我,在单表上设计出一堆较大的 VARCHAR 字段,在失去了扩展性时以后可能会哭。因为 MySQL 的最大行长度限制不只是 1 个 VARCHAR 列,而是所有列的长度总和。

    我们再做个实验观察一下:

    mysql> create table varchar_test3(id int auto_increment, col_2 varchar(21844), primary key(id))charset=utf8 engine=innodb;

    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

    mysql> create table varchar_test3(id int auto_increment, col_2 varchar(21843), primary key(id))charset=utf8 engine=innodb;

    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

    mysql> create table varchar_test3(id int auto_increment, col_2 varchar(21842), primary key(id))charset=utf8 engine=innodb;

    Query OK, 0 rows affected (0.02 sec)

    mysql> create table varchar_test4(id int auto_increment, col_2 varchar(21842), col_3 smallint, primary key(id))charset=utf8 engine=innodb;

    Query OK, 0 rows affected (0.02 sec)

    你可以自行计算一下,在上面的这个实验中,所有列的字节数加起来也是不能超过 65532 的,超出时会报错。

    你可能还有一个疑惑,在 UTF8 中英文字符不是只占用 1 个字节吗,那 varchar (21844) 使用了 65532 个字节,如果我只存英文字符的话是不是就能存 65532 个?

    然而并非如此,VARCHAR (M) 中的 M 仍然表示的是 M 个字符,而不是 M 个字节。

    只不过它在存储的时候仍然是按实际字节数来存的。所以在 UTF8 的字符编码下,我们能使用的最大长度就只有 21844 个 VARCHAR 字符。

    如果要存储更多的字符该怎么办呢?使用 TEXT、BLOB 这样的大对象列类型。因为这些大对象可以把数据存放到溢出页面上,也就是 DBA 们常说的行溢出。

    3. VARCHAR 数据类型优化

    下面我们再聊一聊 VARCHAR 的性能优化相关的一些事情。

    3.1 只分配所需要用的 VARCHAR 空间

    虽然使用 VARCHAR (50) 和 VARCHAR (1000) 存储‘abcd’的存储空间开销是一样的,但是当你在读取数据时,把这些数据读取到内存的过程中,MySQL 数据库需要分配相应大小的内存空间来存放数据。

    所以更大的 VARCHAR 列在读取时要使用更大的内存空间,即使它实际上只存储了一丁点数据。

    并且在操作这个表的过程中,如果遇到一些聚合(GROUP BY)或排序(ORDER BY)的操作,需要调用内存临时表或磁盘临时表时,性能会更加糟糕。

    因此,在保留一定冗余的前提下,只给 VARCHAR 分配恰到好处的空间使用。

    3.2 VARCHAR 的字段过长也会导致行溢出

    刚刚你不是说了 TEXT 和 BLOB 会溢出吗,VARCHAR 也会溢出?

    是的。你在给 MySQL 的数据表加索引时,可能遇到过要在大的 VARCHAR 字段上创建索引却发现只能创建前缀索引的问题。那这个其实是和行溢出有关。

    mysql> create index idx_col_2 on varchar_test4(col_2);

    ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes

    mysql> create index idx_col_2 on varchar_test4(col_2(3072));

    ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes

    mysql> create index idx_col_2 on varchar_test4(col_2(1024));

    Query OK, 0 rows affected (0.02 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    mysql> drop index idx_col_2 on varchar_test4;

    Query OK, 0 rows affected (0.01 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    mysql> create index idx_col_2 on varchar_test4(col_2(1025));

    ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes

    上面实验可以看到,最大的索引长度不能超过 3072 字节(在 UTF-8 的字符集中对应的是 1024 个字符)。

    由于行溢出是另外一个话题,我们今天就不过多赘述,我们只说说大字段和行溢出造成的性能问题。

    大字段会占用较大的内存,使得 MySQL 内存利用率较差

    行溢出的数据在读取时需要多一个 IO,造成 IO 效率下降

    行溢出会使用 uncompress BLOB page,造成 InnoDB 的表空间越来越大

    InnoDB 中的大字段在做更新和删除操作时,只能进行悲观操作,这会造成并发性能下降。

    另外,因为 InnoDB 的数据页默认是 16K,每个页中至少存放 2 行数据,因此建议 VARCHAR 字段的总长度不要超过 8K。

    4. 小结

    今天我给你介绍了 MySQL 的 VARCHAR 数据类型,希望你对 VARCHAR 数据类型能有更多的了解。

    由于篇幅的限制,诸如行溢出这些知识点就不再做深入的探讨。

    不过对于开发人员来说,了解到这里也就基本足够了。如果你对没有展开的那些知识点感兴趣,可以自行搜索研究一番。

    最后留一个问题吧,使用 UTF8 字符集时我们最大可以存储 21844 个字符,那么如果是 UTF8MB4 呢?

    感谢你的阅读,欢迎你给我留言,也欢迎你分享给更多的朋友一起阅读。}

    展开全文
  • 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)的区别在...

    看完这篇文章,你能搞清楚以下问题:

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

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

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

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

    5、mysql字段类型存储需要多少字节?

    接下来请仔细看,整理不易啊。

    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 个 字节;

    5、mysql字段类型存储需要多少字节?

    数字类型

    列类型需要的存储量
    TINYINT1 字节
    SMALLINT2 个字节
    MEDIUMINT3 个字节
    INT4 个字节
    INTEGER4 个字节
    BIGINT8 个字节
    FLOAT(X)4 如果 X < = 24 或 8 如果 25 < = X < = 53
    FLOAT4 个字节
    DOUBLE8 个字节
    DOUBLE PRECISION8 个字节
    REAL8 个字节
    DECIMAL(M,D)M字节(D+2 , 如果M < D)
    NUMERIC(M,D)M字节(D+2 , 如果M < D)

     日期和时间类型

    列类型需要的存储量
    DATE3 个字节
    DATETIME8 个字节
    TIMESTAMP4 个字节
    TIME3 个字节
    YEAR1 字节

     串类型

    列类型需要的存储量
    CHAR(M)M字节,1 <= M <= 255
    VARCHAR(M)L+1 字节, 在此L <= M1 <= M <= 255
    TINYBLOBTINYTEXTL+1 字节, 在此L< 2 ^ 8
    BLOBTEXTL+2 字节, 在此L< 2 ^ 16
    MEDIUMBLOBMEDIUMTEXTL+3 字节, 在此L< 2 ^ 24
    LONGBLOBLONGTEXTL+4 字节, 在此L< 2 ^ 32
    ENUM('value1','value2',...)1 或 2 个字节, 取决于枚举值的数目(最大值65535)
    SET('value1','value2',...)1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)

    text与blob的区别在于:text不能存储图片。blob是二进制流,text是非二进制。

    mysql 的二进制数据类型 BINARY, VARBINARY, BLOB 都没有字符集的概念。

    梅花香自古寒来

    展开全文
  • CREATE TABLE `test` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`content` varchar(5) NOT NULL DEFAULT '',PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_general...
  • 4.0 版本以下,varchar(100),指的是100字节,如果存放UTF8汉字时,只能33个(每个汉字3字节) 5.0 版本以上,varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放100...
  • Mysql记录行数据是有限的。大小为64k,即65535个字节,而varchar要用1-2字节来存储字段长度,小于255的1字节,... 第一,当编码方式为utf-8时,varchar存到21845就存不下了.也就是最大长度是21844.根据上面信息可以...
  • 输出为 250 255 307 如果某个字段属性为varchar(249)那么第一个字符串入库就会报错,如果varchar(254)的话第一个字符串存入就会报错。可以看出不管是数字还是字符串是按照单个字符来做基本单位的,只要一个字符就...
  • Mysql 的varchar能存几个字符?

    千次阅读 2020-11-30 17:48:50
    utf8编码的varchar  Mysql记录行数据是有限的。... 第一,当编码方式为utf-8时,varchar存到21845就存不下了.也就是最大长度是21844.根据上面信息可以推算出 ( 65535-2 )/3=21844余1  例子如下:  
  • Oracle 中 varchar2 到底能存多少个 汉字: 原文链接:https://www.cnblogs.com/firstgreen/p/3586301.html 1. varchar2最大长度为4000字节。 2. varchar2的参数有两个:byte(默认), char 其中varchar2(10 ...
  • 比如说我存储5个char,二者都是实际占用了5个char了【不准确的想法:varchar在实际存储的时候会多一个byte用来存放长度】。 但是深入一下,设计数据库的时候,二者一样吗? 答案是否定的【至少varchar类型需要在数据...
  • 好吧这问题的最佳答案难选... 计算字节长度 ... greatghoul 的答案是对的 ...如果是 utf-8 的话 ... 计算字符长度 ... joyeu 的答案是对的 ...至于 Theo 的答案里说的 4.1 为临界点的区别 ... 这事情真心和版本没什...
  • 2、varchar能存多少汉字、数字? 3、varchar的最大长度是多少呢? 4、字符、字节、位,之间的关系? 5、mysql字段类型存储需要多少字节? 接下来请仔细看,整理不易啊。 1、varchar(100)和varchar(10)的区别在哪里?...
  • mysql-varchar在设计数据库字段的时候,varchar...2、varchar能存多少汉字、数字?3、varchar的最大长度是多少呢?4、字符、字节、位,之间的关系?5、mysql字段类型存储需要多少字节?6、varchar(10)能存多少个字...
  • 答:char和varchar最大的不同就是一个是固定长度,一个是可变...1)varchar(M)和char(M),M都表示字符数.varchar的最大长度为65535个字节,不同的编码所对应的最大可存储的字符数不同。2)char最多可以存放255个字符...
  • 刚做了一个小案例的时候,发现需要对字符串... 测试: varchar(32)存储多少个中文,英文及其他字符? 测试代码如下: var_dump(mb_strlen('你好吗aa','utf8'));//int(5) var_dump(mb_strlen('你好吗aa'));//int(11
  • mysql中的varchar到底能存多长的字符

    千次阅读 2017-11-29 15:53:00
    现在我们来算一下上面的表的varchar字段到底能存多少字符: 下表列出每个字段所占的字节数: int(11) 4字节 int(11) 4字节 smallint(6) 2字节 tinyint(1) 1字节 decimal(10,2) 5字节 余下的...
  • 它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。 UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。 UTF-8编码的文字可以在各国支持UTF8字符集额的浏览器上显示。 如果是UTF8编码,则...
  • 一、关于 UTF-8 UTF-8Unicode Transformation Format-8bit。是用以解决国际上字符的一种多字节编码。 它对英文使用 8 位(即一个字节) ,中文使用 24 位(三个... 如果是UTF8编码,则在外国人的英文 IE 也显示中.
  • 往Oracle一个表的VACHAR2(20)字段中插入七个汉字,提示错误:插入的值太大。...字符集设置成ZHS16GBK:汉字占2个字节。 字符集设置成AL32UTF8:汉字占3个字节。 查询字符集:select * from v$nls_parameter...
  • 4.0版本以下,varchar(50),指的是50字节,如果存放UTF8汉字时,只能16个(每个汉字3字节) 5.0版本以上,varchar(50),指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个 其实...
  • 4.0版本以下bai,varchar(100),指的是100字节,如果存放UTF8汉字du时,只zhi能存33个(每个汉字3字节) 5.0版本以上,varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以...
  • 1.在开始之前先简单介绍下字符和字节的区别: - 字符 人们使用的记号,抽象意义上的一个符号。一个汉字和英文就是一个字符,如'1', '中', 'a', '$', '¥',…… - 字节 计算机中存储数据的单元,一个8位的二进制...
  • 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个 ...
  • MySQL 数据库 varchar 到底可以存多少个汉字,多少个英文呢?我们来搞搞清楚 转载,原文地址:https://www.cnblogs.com/printN/p/7252490.html 一、关于UTF-8 UTF-8 Unicode Transformation Format-8bit。是用以...
  • 标题: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数据类型(主要讲tinyint int varchar) 1 整形字段 tinyint(1字节)、smallint(2字节)、mediumint(3字节)、int(4)和bigint(8) tinyint(1)中的1到底是啥意思 int(11)中的11又到底是什么? 我先创建一张表来实战...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,983
精华内容 19,193
关键字:

varchar能存多少字节