转:巩固mysql 字段的显示宽度

MySQL 显示宽度

1. MySQL 数字类型默认有符号类型还是无符号类型?

答案:有符号类型

Numeric data types that permit the UNSIGNED attribute also permit SIGNED. However, these data types are signed by default, so the SIGNED attribute has no effect.

2. MySQL数字类型的取值范围

-w706

3. 数值类型的显示宽度

对于tinyint(M) 或者 int(M),M为其显示宽度。M对该列字段的存储范围没有半毛钱关系。

当该列定义为无符号类型时,其显示宽度M不起任何作用。换句话说int(11)int(3) 没有任何区别。

当该列定义为ZEROFILL时,当数值位数大于M时,M不会起到任何作用。当数值位数小于M时,左边将会补上零。

-w865

举例:

  • 如果值为123456,当你使用INT(5)ZEROFILL,则返回结果为123456.
  • 如果值为13,当你使用INT(5)ZEROFILL,则返回结果为00013

需要说明的是,当使用ZEROFILL时,该列将自动声明为UNSIGNED

4.char(N) & varchar(N)

N: 代表最大存储长度

-w1041

-w677

存储空间

  • char(n),会占用 n 个字符的空间,即使字符数小于 n 也会按照 n 个字符来存,剩下的用空格补齐,但检索的时候尾部空格会被隐藏。这样会造成空间浪费。
  • varchar(n),如果字符数小于 n,则只会占用字符加上 1 到 2 字节的空间,加上的几个字节用来存储数据大小。没有空间浪费。
  • text,按照字符数量来占用空间,用 2 字节记录存储数据大小,这 2 字节不占用 text 数据的空间。没有空间浪费。速度慢,尤其创建临时表的时候会异常悲剧。

建表语句

 

Create Table: CREATE TABLE `test_db` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `type` int(4) unsigned zerofill DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

UPDATE 操作1

 

//不会被截断。数据库存储的是'a  '
update test_db set name = 'a  ' where id = 6;

//(a  )
select concat('(', name, ')') from test_db where id = 6 ;

-w764

UPDATE操作2

 

//Data too long for column 'name' at row 1
update test_db set name = 'abcdd' where id = 6;

UPDATE操作3

 

update test_db set name = 'abc    ' where id = 6;

//(abc)
select concat('(', name, ')') from test_db where id = 6 ;

-w731

5.加餐

查看MySQL 版本信息

 

mysql> status;
--------------
mysql  Ver 14.14 Distrib 5.7.27, for Linux (x86_64) using  EditLine wrapper

Connection id:      78
Current database:   self_learn
Current user:       fucf@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''

查看MySQL SQL MODE

 

SELECT @@sql_mode \G;
*************************** 1. row ***************************
@@sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,
NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

参考链接:



作者:我是付大善人
链接:https://www.jianshu.com/p/53065fa934c4
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值