轉:鞏固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
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章