mysql varchar(100)可以存储多少个汉字,多少个数字 bigint(20)

varchar(100) 存储多少个汉字,多少个数字 具体还是要看版本的

4.0版本以下(生产环境中基本不用),varchar(100),指的是100字节,如果存放UTF8汉字时,只能存33个(每个汉字3字节) 

5.0版本以上,varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放100个(字符串类型这个宽度才真的用上了), VARCHAR(M)类型的列最多可以占用65535个字节

示例:以5.0以上版本为例。

新建表:

CREATE TABLE varchar_test (
`id` int(11) NOT NULL ,
`string` varchar(20)
) ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci

插入数据:

INSERT INTO varchar_test (id, string) VALUES (1, '一二三四五六七八九十');

INSERT INTO varchar_test (id, string) VALUES (2, '一二三四五六七八九十一二三四五六七八九十');

INSERT INTO varchar_test (id, string) VALUES (3, '12345678901234567890');

测试结果:

1:一二三四五六七八九十
2:一二三四五六七八九十一二三四五六七八九十
3:12345678901234567890

如果插入字符超过21个,则报错  [Err] 1406 - Data too long for column'string' at row 1

可见MySQL的varchar(n)可以存储的中文字符数和英文字符数是一致的,都是n个字符

------------------------------------------------------------------------------------------------------------------------------------------

 bigint(20)中20指的是该字段下能显示最大数字长度

整数类型,这里显示的宽度和数据类型的取值范围是没有任何关系的,显示宽度只是指明Mysql最大可能显示的数字个数,数值的位数小于指定的宽度时会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型的取值范围,数值依然可以插入且能够显示出来(只是显示位数不完全)。如果你不设置宽度,系统将添加默认的宽度tinyint(4),smallint(6),mediumint(9),int(11),bigint(20),这些默认的宽度是跟该类型的取值范围长度相关。

演示
1、bigint(10)和bigint(20)的区别在于如果表定义加上zerofill后再客户端显示长度不同,如下:

drop table test2; 
create table test2 (id bigint(10) zerofill,id1 bigint(20) zerofill);
insert into test2 values(9223372036854775807,9223372036854775807);
select * from test2;

--  结果
-- id                                   id1
-- 922337203685(多两位是撒情况)	        09223372036854775807

2、如果在创建bigint字段时,不指定长度,则默认长度为20,如下:

 create table test3 (id bigint);
 show create table test3;
 
-- 
test3	CREATE TABLE `test3` (
  `id` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

3、无论是bigint(10),还是bigint(20)均占用8个字节,int和tinyinit类型类似。

首先我们看bigint, MySQL的整型类型有这样几种:

类型        存储占用字节
tinyint       1
smallint      2
mediumint     3
int           4
bigint        8

 

tinyint(M)    M默认为4;
SMALLINT(M)   M默认为6;
MEDIUMINT(M)  M默认为9;
INT(M)        M默认为11;
BIGINT(M)     M默认为20. M表示最大显示宽度, 建表若设置了zerofill(0填充),不足长度的会在数字前面补充0,超出长度的将会截取显示

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值