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://stackoverflow.com/questions/12592376/mysql-why-specify-display-width-without-using-zerofill
- https://stackoverflow.com/questions/12839927/mysql-tinyint-2-vs-tinyint1-what-is-the-difference
作者:我是付大善人
鏈接:https://www.jianshu.com/p/53065fa934c4
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。