對於整數和負整數來講,默認狀況下是有符號範圍的mysql
默認
是有符號
sql
有符號和沒符號其實就是有沒有包括負數,有符號是包括負數的
數據庫
設置成無符號:編碼
alter table 表名 變量名 數據類型 unsigned;翻譯
嚴格模式 | 非嚴格模式 | |
---|---|---|
有符號 | (-,+) 超出範圍會報錯 | (-,+) 超出範圍取極值 |
無符號 | (0,+) 超出範圍會報錯 | (0,+) 超出範圍取極值 |
咱們不推薦使用非嚴格模式下
創建table,由於它會可能形成數據丟失的狀況,因此咱們必須在5.6版本中將mysql設置爲嚴格模式。code
方法一:select@@sql_mode; @表示全局變量;@@表示會話級變量(局部)索引
臨時設置set @@sql_mode ='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES ';ci
方法二:直接修改配置文件;字符串
[mysqld]table
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 並重啓服務端mysql後生效.
嚴選狀況下,數據超過他的設置範圍他會報錯
非嚴選狀況下,數據超過他的設置範圍不會報錯,可是隻存他設置大小的那一部分的數據,多餘的會丟掉
數據類型 | 字節數 | 符號範圍 | 有符號範圍 |
---|---|---|---|
TINYINT | 1 | 0~255 | -128~127 |
SMALLINT | 2 | 0~65535 | -32768~32767 |
MEDIUMINT | 3 | 0~16777215 | -8388608~8388607 |
INT | 4 | 0~4294967295 | -2147483648~2147483647 |
BIGINT | 8 | 0~18446744073709551615 | -9223372036854775808 ~9223372036854775807 |
數據類型 | 字節數 | 符號範圍 | 有符號範圍 |
---|---|---|---|
float | 4 | 1.175494351E-38 ~3.402823466E +38 |
-3.402823466E+38~ -1.175494351E-38 |
double | 8 | 2.2250738585072014E-308 ~1.7976931348623157E+308 |
-1.7976931348623157E+308 ~-2.2250738585072014E- 308 |
decimal[(M[,D])] | 最大與 double相同 |
不固定 | 不固定 10.2 decimal(3,1); |
char:定長字符串,字符長度0-255個字節之間,存儲時佔用固定字節空間
相對於varchar來說
優勢: 讀取存儲速度快於varchar
varchar:可變長度字符串,字符長度在0-65532個字節,存儲式佔用空間實際字節長度+1,而+1是存的他的長度
緣由
:由於char咱們若是規定6,而後輸入3個字符,他後面的內容會用宮格來填充,而varchar不會用空格填充,全部存的時候空間節省了,而讀的時候須要發送字符的數量全部讀取會變慢
BINARY和VARBINARY類相似於CHAR和VARCHAR,不一樣的是它們包含二進制字符串而不要二進制字符串
輸入值的和char 與varchar差很少的填充效果
blob:沒有編碼的二進制大字符串.(瞭解便可)
text:具有編碼的大字符串;
都有四種
規定這個裏面輸入內容是什麼,你能夠輸入他的內容,也能夠輸入他的索引
enum與set區別,enum只能輸一個,set能輸入一個或多個,且用集合的形式輸入
注意: mysql會自動將字符串後面的空格刪掉 因此你的數據在存儲前應該先把空格處理掉
year :格式YYYT
timestamp :格式YYYY-MM-DD HH:MM:SS (不用輸入默認爲數據插入時候的插入時間)
注意: