python數據庫數據類型


數字
    整數類型:整型的長度約束,實際上沒有效果
        tinyinit
            有負號(默認): -128 ~ 127 超過報錯(可以調整sql_mode,讓其不報錯)
            create table 表名(字段名 tinyint);
            insert into t1 values (-128);
            
            無符號: 0-255 超過報錯(可以調整sql_mode,讓其不報錯)
            create table 表名(字段名 tinyint unsigned);
            
        int
            有符號(負號): -2147483648 ~ 2147483647 超過報錯(可以調整sql_mode,讓其不報錯)
            create table 表名(字段名 int);
            
            無符號: 0 ~ 4294967295 超過報錯(可以調整sql_mode,讓其不報錯)
            create table 表名(字段名 int unsigned);
        
        bigint
            有符號: -9223372036854775808 ~ 9223372036854775807 超過報錯(可以調整sql_mode,讓其不報錯)
            create table 表名(字段名 bigint);
            
            
            無符號: 0 ~ 18446744073709551615 超過報錯(可以調整sql_mode,讓其不報錯)
            create table 表名(字段名 bigint unsigned);

    浮點型:
        decimal: 推薦使用,准確的小數值,m最大值為65位(包含d的位數),d最大值為30位小數
            create table 表名(字段名 decimal(65,30));
            insert into t1 values(1.1111111111111111111111111111111);
        
        float: 隨着小數的增多,精度變得不准確,m最大值為256位(包含d的位數),d最大值為30位小數
            有符號: -3.402823466E+38 ~ -1.175494351E-38,1.175494351E-38 ~ 3.402823466E+38
            create table 表名(字段名 floact(m,d))

            無符號:
                    1.175494351E-38 ~ 3.402823466E+38

        double: 隨着小數的增多,精度比float要高,但也會變得不准確,m最大值為256位(包含d的位數),d最大值為30位小數
            有符號: -1.7976931348623157E+308 ~ -2.2250738585072014E-308,2.2250738585072014E-308 ~ 1.7976931348623157E+308
            create table 表名(字段名 double(m,d));

            無符號: 2.2250738585072014E-308 ~ 1.7976931348623157E+308


字符串:
    char(10): 簡單粗暴,浪費空間(字符字符串不足10個也存儲10個),存取速度快,字符長度范圍: 0-255(一個中文是一個字符,是utf8編碼的3個字節)
        檢索: 在檢索或者說查詢時,查出的結果會自動刪除尾部的空格,如果你想看到它補全空格之后的內容,除非我們打開pad_char_to_full_length SQL模式(SET sql_mode = 'strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH';)
    
    
    varchar: 准確,節省空間,存取速度慢, 字符長度范圍: 0-65535(如果大於21845會提示用其他類型 mysql行最大限制為65535字節,字符編碼為utf-8

         存儲: varchar類型存儲數據的真實內容,不會用空格填充,如果'ab  ',尾部的空格也會被存起來
        強調:varchar類型會在真實數據前加1-2Bytes的前綴,該前綴用來表示真實數據的bytes字節數(1-2Bytes最大表示65535個數字,正好符合mysql對row的最大字節限制,即已經足夠使用)
        如果真實的數據<255bytes則需要1Bytes的前綴(1Bytes=8bit 2**8最大表示的數字為255)
        如果真實的數據>255bytes則需要2Bytes的前綴(2Bytes=16bit 2**16最大表示的數字為65535)
        
        檢索: 尾部有空格會保存下來,在檢索或者說查詢時,也會正常顯示包含空格在內的內容

    length(字段):查看該字段數據的字節長度
    
    char_length(字段):查看該字段數據的字符長度


BINARY 和 VARBINARY 類似於 CHAR 和 VARCHAR,不同的是它們包含二進制字符串而不要非二進制字符串.也就是說,它們包含字節字符串而不是字符字符串,這說明它們沒有字符集,並且排序和比較基於列值字節的數值值。
BLOB 是一個二進制大對象,可以容納可變數量的數據.有 4 種BLOB類型: TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB.它們區別在於可容納存儲范圍不同.
有 4 種 TEXT 類型: TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT.對應的這 4 種 BLOB 類型,可存儲的最大長度不同,可根據實際情況選擇.

BLOB:
    1._BLOB和_text存儲方式不同,_TEXT以文本方式存儲,英文存儲區分大小寫,而_Blob是以二進制方式存儲,不分大小寫
    2._BLOB存儲的數據只能整體讀出
    3._TEXT可以指定字符集,_BLO不用指定字符集

sql優化建議:創建表時,定長的類型往前放(比如性別),變長的往后放(比如描述信息)
大於255個字符,超了就把文件路徑存放在數據庫中,(比如視頻,數據庫中只存路徑或url)

時間類型:
    YEAR: 范圍1901 ~ 2155
    
    DATE: 范圍1000-01-01 ~ 9999-12-3
    
    TIME: 范圍-838:59:59 ~ 838:59:59
    
    DATETIME(一般都用): 范圍1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
    create table t1(x datetime not null default now()); #獲取當前時間
    
    IMESTAMP: 范圍1970-01-01 00:00:00 ~ 2037
    create table t3(time timestamp);
    insert into t3 value(); #插入當前時間

MySQL的這兩種日期類型都能夠滿足我們的需要,存儲精度都為秒,下面就來總結一下兩種日期類型的區別:
    1.DATETIME的日期范圍是1001——9999年,TIMESTAMP的時間范圍是1970——2038年
    2.DATETIME存儲時間與時區無關,TIMESTAMP存儲時間與時區有關,顯示的值也依賴於時區.在mysql服務器,操作系統以及客戶端連接都有時區的設置.
    3.DATETIME使用8字節的存儲空間,TIMESTAMP的存儲空間為4字節.因此TIMESTAMP比DATETIME的空間利用率更高
    4.DATETIME的默認值為null;TIMESTAMP的字段默認不為空(not null),默認值為當前時間(CURRENT_TIMESTAMP),如果不做特殊處理,並且update語句中沒有指定該列的更新值,則默認更新為當前時間

create table 表名(字段名 類型);
create table t2 (d date,t time,dt datetime);
insert into t2 values('1000-01-01','-838:59:59','9999-12-31 23:59:59');
insert into t11 values(now(),now(),now());  #插入當前時間

 枚舉類型與集合類型
字段的值只能在給定范圍中選擇,如單選框,多選框,如果你在應用程序或者前端不做選項限制,在MySQL的字段里面也能做限制
  enum 單選+只能選枚舉范圍里的  只能在給定的范圍內選一個值
    create table t1 (name char(20),gender enum('female','male'));
    insert into t1 value('bob','male');

  set 多選+去重+只能選在集合里的  在給定的范圍內可以選擇一個或一個以上的值(愛好1,愛好2,愛好3...)
    create table t2 (name char(20),hobby set('抽煙','喝酒','燙頭'));
    insert into t2 values('jack','喝酒,抽煙,燙頭');


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM