Mysql中的字段型別和語法需要注意的問題

2021-10-10 01:58:42 字數 2526 閱讀 4104

資料庫儲存日期格式時,如何考慮時區轉換問題?

datetime 的日期範圍是 1001——9999 年;儲存時間與時區無關;儲存空間為 8 位元組;

timestamp 的時間範圍是 1970——2038 年,儲存時間與時區有關;顯示的值也依賴於時區;儲存空間為 4 位元組

注:時區問題請指定 jvm和mysql的時區保持一致,連線mysql時指定時區 :jdbc:mysql://localhost/test?useunicode=true&servertimezone=asia/shanghai

utf8和utf8mb4的區別

mysql在5.5.3之後增加了這個utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來相容四位元組的unicode。

具體的使用經驗看這篇部落格

blob和text有什麼區別?

blob用於儲存二進位制資料,而text用於儲存大字串。

blob值被視為二進位制字串(位元組字串),它們沒有字符集,並且排序和比較基於列值中的位元組的數值。text值被視為非二進位制字串(字元字串)。它們有乙個字符集,並根據字符集的排序規則對值進行排序和比較。

可儲存的最大長度:

tinytext,tinyblob:255 bytes

text, blob:65,535 bytes(64kb - 1b)

mediumtext, mediumblob:16,777,215 bytes(16mb - 1b)

longtext,longblob:4,294,967,295 bytes(4gb - 1b)

drop、delete與truncate的區別

(1)delete語句執行刪除的過程是每次從表中刪除一行,並且同時將該行的刪除操作作為事務記錄在日誌中儲存以便進行進行回滾操作。

truncate table 則一次性地從表中刪除所有的資料並不把單獨的刪除操作記錄記入日誌儲存,刪除行是不能恢復的。並且在刪除的過程中不會啟用與表有關的刪除觸發器。執行速度快。(如果存在自增列,則會刪除記憶體中記錄的最大記錄,從1開始自增)

(2)表和索引所佔空間。

當表被truncate 後,這個表和索引所占用的空間會恢復到初始大小,

delete操作不會減少表或索引所占用的空間。

drop語句將表所占用的空間全釋放掉。

(3)一般而言,drop > truncate > delete

(4)應用範圍。

truncate 只能對table; delete可以是table和view

(5)truncate 和delete只刪除資料, drop則刪除整個表(結構和資料)。

詳細比較參考:

union與union all的區別?

union:對兩個結果集進行並集操作,去除重複行,同時進行預設規則的排序;

union all:對兩個結果集進行並集操作,包括重複行,不進行排序;union all的效率高於 union

count(1)、count(*) 與 count(列名) 的區別?

count(*)包括了所有的列,相當於行數,在統計結果的時候,不會忽略列值為null

count(1)包括了忽略所有列,用1代表**行,在統計結果的時候,不會忽略列值為null

count(列名)只包括列名那一列,在統計結果的時候,會忽略列值為空(這裡的空不是只空字串或者0,而是表示null)的計數,即某個字段值為null時,不統計。

innodb使用相同的方式處理select count(*)和select count(1),沒有效能差異

mysql中int(20)和char(20)以及varchar(20)的區別

int(20) 表示欄位是int型別,顯示長度是 20;

char(20)表示欄位是固定長度字串,長度為 20,如果不到20個字元,則用空格填充;

varchar(20) 表示欄位是可變長度字串,最大長度為 20;

因為其長度固定,char的訪問速度還是要比varchar要快得多,方便程式的儲存與查詢;但是char也為此付出的是空間的代價,因為其長度固定,所以會佔據多餘的空間,可謂是以空間換取時間效率。varchar則剛好相反,以時間換空間。

mysql裡記錄貨幣用什麼字段型別比較好?

貨幣在資料庫中mysql常用decimal和numric型別表示,numric是decimal型別的實現,作為定點數儲存數值。他們被用於儲存與金錢有關的資料。salary decimal(9,2),9表將被用於儲存值的總的小數字數,而2代表將被用於儲存小數點後的位數。儲存在salary列中的值的範圍是從-9999999.99到9999999.99。

而float和double是浮點數儲存,會存在丟失精度的問題。

mysql中 text和blob欄位型別比較區別

1.blob是二進位製大物件,可以容納可變數數量的資料,其中blob分為4中型別 tinyblob,blob,mediumblob和longblob,他們容納的長度是不同的.text同樣也分為四種型別 tinytext text mediumtext和longtext 2.blob被視為二進位制字串...

mysql的型別 MySQL欄位型別詳解

mysql支援大量的列型別,它可以被分為3類 數字型別 日期和時間型別以及字串 字元 型別。本節首先給出可用型別的乙個概述,並且總結每個列型別的儲存需求,然後提供每個類中的型別性質的更詳細的描述。概述有意簡化,更詳細的說明應該考慮到有關特定列型別的附加資訊,例如你能為其指定值的允許格式。由mysql...

MYSQL 排序中的字段型別轉換

欄位server id是varchar型別,查詢時以server id排序,排序結果有問題?select server id from cardserver where game id 1order by server id desc limit 10 原因是 資料庫根據字串排序,10也排在9之後了...