文章編號:10749時間:2024-09-29人氣:
接下來給大家解釋一下:
這個圖要從下往上看,為何?——因為下面是上面的基礎;
MySQL中,一系列實用的日期和時間函數能有效處理時間數據。 首先,獲取當前時間通常借助now函數,其默認精確到秒,通過參數可提升到毫秒級別。 sysdate雖然也用于此,但它是非確定性的,而now是確定性的,即now返回的是腳本執行時的恒定時間,而sysdate則返回的是執行時的實時時間。
對于時間戳處理,有兩個關鍵函數:獲取當前時間戳(如from_unixtime(0))會得到1970年1月1日0點0分0秒;而將時間戳轉換為日期格式,date_format函數是開發中的常用工具。 同時,extract函數允許提取日期中的年、月、周、日、小時、分鐘和秒等單位。
處理日期時區轉換和運算也非常重要。 可以直接進行日期的加減操作,或者利用特定函數進行更復雜的計算。 這些功能對于精準管理和格式化時間數據至關重要。
MySQL數據庫的表是一個二維表,由一個或多個數據列構成。 每個數據列都有它的特定類型,該類型決定了MySQL如何看待該列數據,我們可以把整型數值存放到字符類型的列中,MySQL則會把它看成字符串來處理。 MySQL中的列類型有三種:數值類、字符串類和日期/時間類。 從大類來看列類型和數值類型一樣,都是只有三種。 但每種列類型都還可細分。 下面對各種列類型進行詳細介紹。 數值類的數據列類型數值型的列類型包括整型和浮點型兩大類。 TINYINT:1字節 非常小的正整數,帶符號:-128~127,不帶符號:0~255 SMALLINT:2字節 小整數,帶符號:-~,不帶符號:0~ MEDIUMINT:3字節 中等大小的整數,帶符號:-~,不帶符號:0~ INT:4字節 標準整數,帶符號:-~,不帶符號:0~ BIGINT:8字節 大整數,帶符號:-~,不帶符號:0~ FLOAT:4字節 單精度浮點數,最小非零值:+-1.E-38,最大非零值:+-3.E+38 DOUBLE:8字節 雙精度浮點數,最小非零值:+-2.E-308,最大非零值:+-1.E+308 DECIMAL:M+2字節 以字符串形式表示的浮點數,它的取值范圍可變,由M和D的值決定。 整型數據列類型MySQL有五種整型數據列類型,即TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。 它們之間的區別是取值范圍不同,存儲空間也各不相同。 在整型數據列后加上UNSIGNED屬性可以禁止負數,取值從0開始。 聲明整型數據列時,我們可以為它指定個顯示寬度M(1~255),如INT(5),指定顯示寬度為5個字符,如果沒有給它指定顯示寬度,MySQL會為它指定一個默認值。 顯示寬度只用于顯示,并不能限制取值范圍和占用空間,如:INT(3)會占用4個字節的存儲空間,并且允許的最大值也不會是999,而是INT整型所允許的最大值。 浮點型數據列類型MySQL有三種浮點型數據列類型,分別是:FLOAT,DOUBLE和DECIMAL。 浮點類數據類型有一個最大可表示值和一個最小非零可表示值,最小非零可表示值決定了該類型的精確度。 MySQL 4.0.2版之后,FLOAT和DOUBLE都可以指定UNSIGNED屬性。 當指定該屬性時,取值范圍不平移到正數區間,而只是簡單地把浮點類型的負數部份去掉。 浮點類型也有M(1~255)和D(1~30,且不能大于M-2)。 分別表示顯示寬度和小數位數。 M和D在FLOAT和DOUBLE中是可選的,默認,當MySQL版本大于3.23.6時,FLOAT和DOUBLE類型將被保存為硬件所支持的最大精度。 DECIMAL的M和D值在MySQL3.23.6后可選,默認D值為0,M值為10。 如何選擇數值類數據列類型?為了節省存儲空間和提高數據庫處理效率,我們應根據應用數據的取值范圍來選擇一個最適合的數據列類型。 如果把一個超出數據列取值范圍的數存入該列,則MySQL就會截短該值,如:我們把存入SMALLINT(3)數據列里,因為SMALLINT(3)的取值范圍是-~,所以就會被截短成存儲。 顯示寬度3不會影響數值的存儲。 只影響顯示。 對于浮點數據列,存入的數值會被該列定義的小數位進行四舍五入。 如把一個1.234存入FLOAT(6.1)數據列中,結果是1.2。 DECIMAL與FLOAT和DOUBLE的區別是:DECIMAL類型的值是以字符串的形式被儲存起來的,它的小數位數是固定的。 它的優點是,不會象FLOAT和DOUBLE類型數據列那樣進行四舍五入而產生誤差,所以很適合用于財務計算;而它的缺點是:由于它的存儲格式不同,CPU不能對它進行直接運算,從而影響運算效率。 DECIMAL(M,D)總共要占用M+2個字節。 數值類數據列的屬性ZEROFILL屬性適用于所有數值類數據列類型,作用是,如果數值的寬度小于定義的顯示寬度,則在數值前填充0。 UNSIGNED屬性不允許數據列出現負數。 AUTO_INCREMENT屬性可生成獨一無二的數字序列。 只對整數類的數據列有效。 NULL和NOT NULL屬性設置數據列是否可為空。 DEFAULT屬性可為數據列指定默認值。 //////////////////////////////////////////////////////字符串類數據列類型字符串可以用來表示任何一種值,所以它是最基本的類型之一。 我們可以用字符串類型來存儲圖象或聲音之類的二進制數據,也可存儲用gzip壓縮的數據。 下表介紹了各種字符串類型:CHAR[(M)] M字節 M字節 VARCHAR[(M)] M字節 L+1字節 TINYBLOD,TINYText 2^8-1字節 L+1字節 BLOB,TEXT 2^16-1字節 L+2 MEDIUMBLOB,MEDIUMTEXT 2^24-1字節 L+3 LONGBLOB,LONGTEXT 2^32-1字節 L+4 ENUM(value1,value2,...) 個成員 1或2字節 SET(value1,value2,...) 64個成員 1,2,3,4或8字節 L+1、L+2是表示數據列是可變長度的,它占用的空間會根據數據行的增減面則改變。 數據行的總長度取決于存放在這些數據列里的數據值的長度。 L+1或L+2里多出來的字節是用來保存數據值的長度的。 在對長度可變的數據進行處理時,MySQL要把數據內容和數據長度都保存起來。 如果把超出字符串最大長度的數據放到字符類數據列中,MySQL會自動進行截短處理。 ENUM和SET類型的數據列定義里有一個列表,列表里的元素就是該數據列的合法取值。 如果試圖把一個沒有在列表里的值放到數據列里,它會被轉換為空字符串(“”)。 字符串類型的值被保存為一組連續的字節序列,并會根據它們容納的是二進制字符串還是非二進制字符而被區別對待為字節或者字符:二進制字符串被視為一個連續的字節序列,與字符集無關。 MySQL把BLOB數據列和帶BINARY屬性的CHAR和VARCHAR數據列里的數據當作二進制值。 非二進制字符串被視為一個連續排列的字符序列。 與字符集有關。 MySQL把TEXT列與不帶BINARY屬性的CHAR和VARCHAR數據列里的數據當作二進制值對待。 在MySQL4.1以后的版本中,不同的數據列可以使用不同的字符集。 在MySQL4.1版本以前,MySQL用服務器的字符集作為默認字符集。 非二進制字符串,即我們通常所說的字符串,是按字符在字符集中先后次序進行比較和排序的。 而二進制字符串因為與字符集無關,所以不以字符順序排序,而是以字節的二進制值作為比較和排序的依據。 下面介紹兩種字符串的比較方式:二進制字符串的比較方式是一個字節一個字節進行的,比較的依據是兩個字節的二進制值。 也就是說它是區分大小寫的,因為同一個字母的大小寫的數值編碼是不一樣的。 非二進制字符串的比較方式是一個字符一個字符進行的,比較的依據是兩個字符在字符集中的先后順序。 在大多數字符集中,同一個字母的大小寫往往有著相同的先后順序,所以它不區分大小寫。 二進制字符串與字符集無關,所以無論按字符計算還是按字節計算,二進制字符串的長度都是一樣的。 所以VARCHAR(20)并不表示它最多能容納20個字符,而是表示它最多只能容納可以用20個字節表示出來的字符。 對于單字節字符集,每個字符只占用一個字節,所以這兩者的長度是一樣的,但對于多字節字符集,它能容納的字符個數肯定少于20個。 CHAR和VARCHARCHAR和VARCHAR是最常用的兩種字符串類型,它們之間的區別是:CHAR是固定長度的,每個值占用相同的字節,不夠的位數MySQL會在它的右邊用空格字符補足。 VARCHAR是一種可變長度的類型,每個值占用其剛好的字節數再加上一個用來記錄其長度的字節即L+1字節。 CHAR(0)和VARCHAR(0)都是合法的。 VARCHAR(0)是從MySQL4.0.2版開始的。 它們的作用是作為占位符或用來表示各種on/off開關值。 如何選擇CHAR和VARCHAR,這里給出兩個原則:如果數據都有相同的長度,選用VARCHAR會多占用空間,因為有一位用來存儲其長度。 如果數據長短不一,選用VARCHAR能節省存儲空間。 而CHAR不論字符長短都需占用相同的空間,即使是空值也不例外。 如果長度出入不大,而且是使用MyISAM或ISAM類型的表,則用CHAR會比VARCHAR好,因為MyISAM和ISAM類型的表對處理固定長度的行的效率高。 在一個數據表里,只要有一個數據列的長度是可變的,則所有數據列的長度將是可變的。 MySQL會進行自動地轉換。 一個例外,CHAR長度小于4的不會進行自動轉換,因為MySQL會認為這樣做沒必要,節省不了多少空間。 反而MySQL會把大量長度小的VARCHAR轉換成CHAR,以減少空間占用量。 BLOB和TEXTBLOB是二進制字符串,TEXT是非二進制字符串。 兩者都可存放大容量的信息。 有關BLOB和TEXT索引的建立:BDB表類型和MySQL3.23.2以上版本的MyISAM表類型允許在BLOB和TEXT數據列上建立索引。 ISAM、HEAP和InnoDB表不支持大對象列的索引。 使用BLOB和TEXT應注意的問題:由于這兩個列類型所存儲的數據量大,所以刪除和修改操作容易在數據表里產生大量的碎片,需定期運行OPTIMIZE TABLE以減少碎片和提高性能。 如果使用的值非常巨大,就需對服務器進行相應的優化調整,增加max_allowed_packet參數的值。 對那些可會用到變些巨大數據的客戶程序,也需加大它們的數據包大小。 ENUM和SETENUM和SET都是比較特殊的字符串數據列類型,它們的取值范圍是一個預先定義好的列表。 ENUM或SET數據列的取值只能從這個列表中進行選擇。 ENUM和SET的主要區別是:ENUM只能取單值,它的數據列表是一個枚舉集合。 它的合法取值列表最多允許有個成員。 例如:ENUM(N,Y)表示,該數據列的取值要么是Y,要么就是N。 SET可取多值。 它的合法取值列表最多允許有64個成員。 空字符串也是一個合法的SET值。 ENUM和SET的值是以字符串形式出現的,但在內部,MySQL以數值的形式存儲它們。 ENUM的合法取值列表中的字符串被按聲明定義的順序被編號,從1開始。 SET的編號不是按順序進行編號的,SET中每一個合法取值都對應著SET值里的一個位。 第一個合法取值對應0位,第二個合法取值對應1位,以此類推,如果數值形式的SET值等于0,則說明它是一個空字符串,如果某個合法的取值出現在SET數據列里,與之對應的位就會被置位;如果某個合法的取值沒有出現在SET數據列里,與之對應的位就會被清零。 正因為SET值與位有這樣的對應關系,所以SET數據列的多個合法取值才能同時出現并構成SET值。 字符串類型數據列的字符集屬性在MySQL 4.1以前的版本,字符串數據列的字符集由服務器的字符決定,MySQL 4.1版以后的版本可對每個字符串數據列指定不同的字符串。 如果按默認方式設置,可按數據列、數據表、數據庫、服務器的順序關聯字符串的字符集,直到找一個明確定義的字符集。 /////////////////////////////////////////////////////////日期,時間型數據列類型DATE 1000-01-01~9999-12-31 3字節(MySQL3.23版以前是4字節 ) 0000-00-00 TIME -838:59:59~838:59:59 3字節 00:00:00 DATETIME 1000-01-01 00:00:00~9999-12-31 23:59:59 8字節 0000-00-00 00:00:00 TIMESTAMP 000~2037年的某個時刻 4字節 000 YEAR YEAR(4):1901~2155 YEAR(2):1970~2069 1字節 0000 MySQL總是把日期和日期里的年份放在最前面,按年月日的順序顯示。 DATE、TIME、DATATIME數據列類型DATE、TIME和DATATIME類型分別存放日期值、時間值、日期和時間值的組合。 它們的格式分別是“CCYY-MM-DD”、“hh:mm:ss”、“CCYY-MM-DD hh:mm:ss”。 DATATIME里的時間值和TIME值是有區別的,DATATIME里的時間值代表的是幾點幾分,TIME值代表的是所花費的時間。 當向TIME數據列插值時,需用時間的完整寫法,如12分30秒要寫成“00:12:30”。 TIMESTAMP數據列類型TIMESTAMP數據列的格式是CCYYMMDDhhmmss,取值范圍從000開始,即1970年1月1號,最大到2037年。 它的特點是能把數據行的創建或修改時間記錄下來:如果把一個NULL值插入TIMESTAMP列,這個數據列就將自動取值為當前的日期和時間。 在創建和修改數據行時,如果沒有明確對TIMESTAMP數據列進行賦值,則它就會自動取值為當前的日期和時間。 如果行中有多個TIMESTAMP列,只有第一個會自動取值。 如果對TIMESTAMP設置一個確定的日期和時間值,則會使TIMESTAMP的自動取值功能失效。 TIMESTAMP默認的列寬是14,可指定列寬,以改變顯示效果。 但不論你指定的列寬如何,MySQL都是以4字節來存儲TIMESTAMP值,也總是以14位精度來計算。 如果需要把創建時間和最近一次修改時間同時記錄下來,可以用兩個時間戳來記錄,一個記錄創建時間,一個記錄修改時間。 不過需記住兩件事,一是要把記錄修改時間的TIMESTAMP數據列放在最前面,這樣才會自動取值;二是創建一條新記錄時,要用now()函數來初始化創建時間TIMESTAMP數據列,這樣,該TIMESTAMP數據列就不會再變化。 YEARYEAR是一種單字節的數據列類型,YEAR(4)的取值范圍是1901~2155,YEAR(2)的取值范圍是1970~2069,但只顯示最后兩位數。 MySQL能自動把兩位數字年份轉換成四位數字的年份,如97和14分被轉換成1997和2014。 轉換規則是這樣的:年份值00~69將被轉換成2000~2069;年份值70~99將被轉換成1970~1999。 00被轉換成0000,而不是2000。 因為數值00也就是0,而0值是YEAR的一個合法取值。
親愛的朋友們,今天小米來解答大家的疑問:MySQL中如何選擇最佳時間類型存儲?時間處理可不容小覷,正確選擇對數據庫性能和數據一致性至關重要!MySQL提供了DATE、TIME、DATETIME和TIMESTAMP這幾種時間類型。 DATE用于存儲日期,如生日;TIME專注于時間,記錄事件發生的具體時間;DATETIME則同時包含日期和時間,但不考慮時區;TIMESTAMP同樣包含日期和時間,且會自動更新為當前時間戳,并考慮時區影響。 在性能方面,選擇恰當的時間類型能提升查詢和插入操作的效率。 但別忘了,時區處理在選擇過程中同樣重要,需要根據業務需求靈活處理。 總結來說,選擇時間類型需根據業務需求來定,既要滿足功能,又要考慮性能和存儲空間。 記住,一個優秀的數據庫設計師會根據實際情況做出最佳決策。 如果你在選擇過程中遇到困惑,歡迎在下方留言討論,一起進步。 別忘了分享給更多朋友,讓我們一起學習成長!感謝閱讀,期待下次再見!若想獲取更多技術分享,可以關注我的公眾號“知其然亦知其所以然”。
深入探索RTMP協議的奧秘:從基礎到高級優化,打造流暢直播體驗!
RTMP,作為Adobe的實時通信協議,對于視頻直播質量和用戶體驗至關重要。 它基于TCP的特性,以多路復用和分包處理為核心,特別在VR直播中扮演著關鍵角色。 其URL格式是直觀的:rtmp://ip:port/appName/streamName,其中包含了版本信息、握手細節和特定應用參數。
在實際應用中,RTMP的注意事項不可忽視:
每個RTMP消息塊由四個部分構成:基本頭部、消息頭部、擴展時間戳和數據塊。 chunk的基本頭部有三種格式,每種都有其特定用途和優化策略。
chunk類型和優化當涉及到音視頻推送時,要確保FLV-TAG格式的正確封裝,保持時間戳的遞增性和準確性,避免播放同步問題。
總結起來,RTMP協議雖然復雜,但通過遵循正確的連接、數據包發送和管理流程,可以實現高效的直播體驗。 本文旨在提供一個全面的指南,歡迎持續學習和交流。
內容聲明:
1、本站收錄的內容來源于大數據收集,版權歸原網站所有!
2、本站收錄的內容若侵害到您的利益,請聯系我們進行刪除處理!
3、本站不接受違法信息,如您發現違法內容,請聯系我們進行舉報處理!
4、本文地址:http://m.sycxjdsbhs.com/article/c4829d511c9f5683c72e.html,復制請保留版權鏈接!
掌握文件權限對于保護敏感數據和確保系統安全至關重要,在Linux和其他類Unix操作系統中,chmod命令用于更改文件和目錄的權限,chmod命令chmod命令的語法如下,```chmod[選項]模式文件或目錄```其中,選項,用于指定要執行的操作,例如`,R`用于遞歸更改目錄中所有文件的權限,模式,指定新的權限,由以下數字表示,用戶...。
本站公告 2024-09-28 08:11:21
簡介`NSTimeInterval`是Cocoa和Swift中一種數據類型,用來表示以秒為單位的時間間隔,它在iOS、macOS和tvOS等Apple平臺的許多應用程序和框架中廣泛使用,類型`NSTimeInterval`是一個雙精度浮點型數據類型,這意味著它可以表示非常大或非常小的數值,它與`double`類型兼容,并且可以存儲有效...。
最新資訊 2024-09-25 09:03:12
在iOS開發中,NSTimeInterval是一個至關重要的數據類型,用于測量和操作時間,它是Double類型的別名,代表以秒為單位的時間段,NSTimeInterval廣泛用于各種場景中,包括,測量任務執行時間調度延遲操作創建動畫和計時器比較時間戳主要特性NSTimeInterval具有幾個重要的特性,高精度,它以雙精度浮點數存儲時...。
最新資訊 2024-09-25 09:02:09
JavaScriptDate對象提供了用于創建和操縱日期和時間的豐富方法,使用這些方法,我們可以輕松地創建和自定義日歷,創建日歷要創建日歷,我們需要先創建一個新的Date對象,我們可以使用getDate,、getDay,和getMonth,方法來獲取當前日期、星期和月份,constdate=newDate,constday=...。
技術教程 2024-09-16 09:41:53
HTML,超文本標記語言,和CSS,層疊樣式表,是網站構建的兩大基石,HTML為網站提供結構和內容,而CSS則控制其外觀和布局,HTMLHTML是用于創建網頁的標記語言,它使用一系列標記來定義網頁的各個部分,例如標題、段落和圖像,HTML標記通常與內容一起使用,例如,這是一段文字,```CSSCSS是一門樣式表語言,用于控制HTML元...。
本站公告 2024-09-15 21:55:33
高級用例,您可以創建用戶體驗出色、視覺上吸引人的網頁布局,掌握position屬性將使您能夠構建響應迅速、交互良好的網站,讓用戶參與其中并留下深刻印象,...。
最新資訊 2024-09-14 14:49:28
與其他數據類型的兼容性,MySQL數據類型總結數據類型描述大小范圍TINYINT一個字節的整數1字節,128到127SMALLINT兩個字節的整數2字節,32768到32767MEDIUMINT三個字節的整數3字節,8388608到8388607INT四個字節的整數4字節,2147483648到2147483647BIGINT八個字節...。
本站公告 2024-09-14 13:07:32
保應用程序的安全至關重要,可以防止數據泄露、惡意攻擊和其他威脅,Angular提供了諸如跨站點腳本,XSS,、跨站點請求偽造,CSRF,和注入攻擊等安全功能,結論通過遵循Angular最佳實踐,你可以設計和開發健壯、可擴展且易于維護的應用程序,這些最佳實踐可以幫助你提高開發效率、提高應用程序質量并確保出色的用戶體驗,...。
技術教程 2024-09-14 05:52:25
項會平滑地向上移動和放大,案例2,視差滾動利用CSS3視差特性,實現當用戶滾動網頁時,不同元素以不同的速度移動,營造出縱深感和沉浸感,案例3,粒子效果使用Canvas創建粒子效果,讓網頁上漂浮著無數的小粒子,增強視覺效果和互動性,案例4,3D翻轉動畫利用WebGL實現3D翻轉動畫,當用戶點擊元素時,元素會沿Z軸旋轉并顯示背面,案例5,...。
技術教程 2024-09-13 20:42:19
國際業務和旅行的必備工具在當今全球化的世界中,匯率轉換已成為跨國業務和旅行的必要組成部分,RATE函數是MicrosoftExcel中一個強大的工具,它可以簡化匯率轉換,確保準確性和便利性,什么是RATE函數,RATE函數是一個內置的Excel函數,用于將一種貨幣轉換為另一種貨幣,它采用以下語法,=RATE,schedule,num,...。
本站公告 2024-09-13 03:37:41
LinuxShell是一種強大的工具,可用于執行各種系統管理任務,它提供了一種用戶界面,使用戶能夠與操作系統交互,并執行命令和腳本以執行各種任務,使用BashShell玩打地鼠游戲為了展示LinuxShell的功能,我們將利用BashShell開發一個簡單的打地鼠游戲,1.創建游戲板我們需要創建一個代表游戲板的文本文件,創建一個名為g...。
本站公告 2024-09-07 12:34:05
歡迎來到PHP手冊的中文版!本指南是深入了解PHP語言核心并編寫高效、可維護代碼的寶貴資源,PHP核心原理數據類型,了解不同數據類型,例如整數、浮點數、字符串和數組,變量,如何聲明和使用變量,以及作用域和內存管理的概念,控制流,掌握if,else語句、循環和switch語句等控制流結構,函數,創建和使用設計模式,以提高代碼的可擴展性和...。
最新資訊 2024-09-07 09:20:15