005_MySQL数据类型
1. MySQL中定義數據字段的類型對你數據庫的優化是非常重要的。
2. MySQL支持多種類型, 大致可以分為三類: 數值、日期/時間和字符串(字符)類型。
3. 數值類型
3.1. 數值類型列表
| 類型 | 字節數 | 取值范圍 |
| tinyint(迷你整型) | 1?byte | (-128,?127) |
| smallint(小整型) | 2?bytes | (-32768, 32767) |
| mediumint(中整型) | 3?bytes | (-8388608,?8388607) |
| int或integer(標準整型) | 4?bytes | (-2147483648,?2147483647) |
| bigint(大整型) | 8?bytes | (-9223372036854775808,?9223372036854775807) |
| float(單精度) | 4?bytes | (-3.402823466E+38,?-1.175494351E-38), ?0, (1.175494351E-38,?3.402823466E+38) |
| double(雙精度) | 8?bytes | (-1.7976931348623157E+308,??-2.2250738585072014E-308), 0, (2.2250738585072014E-308,??1.7976931348623157E+308) |
| decimal(M, D) | m + 2 | M是數字的最大長度, 取值范圍1~65, 默認值為10。 D是小數點位數, 取值范圍為0~30, 不得超過M的長度。 |
3.2. 長度
3.2.1. 長度和字節數不是一個東西。
3.2.2. tinyint、smallint、mediumint、int、bigint、float和double最大長度可設置為255。
3.2.3. tinyint類型的長度默認是4。長度大概是-128的字符位數。
3.2.4. smallint類型的長度默認是6。長度大概是-32768的字符位數。
3.2.5. mediumint類型的長度默認是9。長度大概是-8388608的字符位數。
3.2.6. int類型的長度默認是11。長度大概是-2147483648的字符位數。
3.2.7. bigint類型的長度默認是20。長度大概是-9223372036854775808的字符位數。
3.2.8. float和double小數點后最大長度30。
3.2.9. decimal類型M的最大長度65, D的最大長度30, D不能大于M的長度。
3.2.10. 長度和取值范圍無關。即使你把tinyint類型的長度設置為2(雖然一般不這么做), 依然可以存值-128或127。
3.3. 創建Number表使用數值類型
3.3.1. Number表結構
3.3.2. Number表
4. 日期類型
4.1. 日期類型列表
| 類型 | 字節數 | 范圍 | 格式 |
| date(日期值) | 3?bytes | 1000-01-01 ~ 9999-12-31 | YYYY-MM-DD |
| time(時間值) | 3?bytes | '-838:59:59' ~ '838:59:59' | HH:MM:SS |
| year(年份值) | 1?bytes | 1901 ~ 2155 | YYYY |
| datetime(日期和時間) | 8?bytes | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS |
| timestamp(時間戳) | 4?bytes | 1970-01-01 00:00:00 結束時間是第2147483647秒, 北京時間2038-1-19 11:14:07, 格林尼治時間2038年1月19日 凌晨03:14:07 | YYYY-MM-DD HH:MM:SS |
4.2. year類型只有一個字節, 為什么能表示1901 ~ 2155? 實際上一個year類型所存的一個字節的無符號值的范圍是0 ~ 255, 年份從1900年開始算起, 1900加上0 ~ 255就表示1901 ~ 2155了。
4.3. time類型的HH段怎么表示-838 ~ 838了, 怎么不是23? 因為time類型并不是表示的一天的時間值, 它可以表示從一段時間到一段時間的時間值, 一段時間到一段時間就會出現比較大的HH, 因此它們設計了'-838:59:59' ~ '838:59:59'這樣一個時間范圍。
4.4. year類型有一個長度值, 默認是4。date、time、datetime和timestamp類型沒有長度值。
4.5. Date表結構
4.6. Date表內容
5. 字符串類型
5.1.?字符串類型列表
| 類 型 | 字節數 | 說明 |
| char(N) | 0 ~ 最大字符字節長度*N bytes | 定長字符串 |
| varchar | 0 ~ 65535?bytes | 可變長度字符串 |
| tinytext | 0 ~ 255?bytes | 短長度文本字符串 |
| text | 0 ~ 65535?bytes | 長文本字符串 |
| mediumtext | 0 ~ 16777215?bytes | 中長度文本字符串 |
| longtext | 0 ~ 4294967295?bytes | 極大文本字符串 |
| tinyblob | 0 ~ 255?bytes | 短長度二進制字符串 |
| blob | 0 ~ 65535?bytes | 長文本二進制字符串 |
| mediumblob | 0 ~ 16777215?bytes | 中長度二進制字符串 |
| longblob | 0 ~ 4294967295?bytes | 極大二進制字符串 |
5.2.?varchar使用1到2個額外的字節標識實際存儲的字符串長度。如果列的最大長度小于256個字節, 用一個字節標識。如果最大長度大于等于256, 使用兩個字節標識。
5.3.?長度
5.3.1.?char類型的長度最大可以設置為255, 表示可以容納255個字符(無論是漢字還是其它字符都可以容納255個), 如果實際存儲字符不夠255個, 字符串后添加空格補全。因此在讀取數據時, char類型的數據要進行處理, 把后面的空格去除。
5.3.2.?varchar類型的長度最大可以設置為65535, 表示可以容納65535個字符, 如果實際存儲字符不夠65535個, 按實際存儲字符長度(不會用空格補全)。
5.3.3.?tinytext、text、mediumtext、longtext、tinyblob、blob、mediumblob和longblob類型沒有長度值。
5.3.4.?NULL標識位, 如果varchar字段定義中帶有default null允許列空, 則需要需要1bit來標識, 每8個bits的標識組成一個字段。
5.3.5.?如果使用的字符編碼是utf8, varchar類型最大長度(65535-1-2)/3=21848。事實上?varchar類型長度還和很多因素有關, 這個時候就需要研究InnoDB引擎了, 一般不超過20000都沒有問題, 我們根據實際需求來設置就好了。
5.4. text是一個文本對象, 它和varchar基本相同。有4種text類型: tinytext、text、mediumtext和longtext。它們區別在于可容納存儲范圍不同。text一般用來存儲一篇文章或者一段話等。
5.5. 如果使用的字符編碼是utf8, tinytext可以容納255/3=85個漢字, 單字節字符255個。
5.6. 如果使用的字符編碼是utf8, text可以容納65535/3=21845個漢字, 單字節字符65535個。
5.7. 如果使用的字符編碼是utf8, mediumtext可以容納16777215/3=5592405個漢字, 單字節字符16777215個。
5.8. 如果使用的字符編碼是utf8, longtext可以容納4294967295/3=1431655765個漢字, 單字節字符4294967295個。
5.9. blob是一個二進制大對象, 可以容納可變數量的數據。有4種blob類型: tinyblob、blob、mediumblob和longblob。它們區別在于可容納存儲范圍不同。blob一般用來存儲文件, 例如: 圖片、視頻等。
5.10. String表結構
5.11. String表內容
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的005_MySQL数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 021_泛型嵌套
- 下一篇: 006_表的CRUD的操作