小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

MySQL 從零開始:05 數(shù)據(jù)類型

 靜幻堂 2018-09-03
C與Python實戰(zhàn) 2018-08-02 20:03:43
MySQL 從零開始:05 數(shù)據(jù)類型

前面的講解中已經(jīng)接觸到了表的創(chuàng)建,表的創(chuàng)建是對字段的聲明,比如:

MySQL 從零開始:05 數(shù)據(jù)類型

上述語句聲明了字段的名稱、類型、所占空間、默認值 和是否可以為空等信息。其中的 intvarchar、chardecimal 都是 MySQL 所支持的數(shù)據(jù)類型,本節(jié)將詳細介紹 MySQL 支持的數(shù)據(jù)類型。

MySQL 中定義數(shù)據(jù)字段的類型對數(shù)據(jù)庫的優(yōu)化非常重要。MySQL中的每種數(shù)據(jù)類型都可以通過以下特征來確定:

  • 它用來表示數(shù)據(jù)值。
  • 占用的空間以及值是固定長度還是可變長度。
  • 數(shù)據(jù)類型的值可以被索引。
  • MySQL如何比較特定數(shù)據(jù)類型的值。

MySQL 支持的數(shù)據(jù)類型可以分為三類:數(shù)值日期/時間字符串(字符)類型,另外還有空間數(shù)據(jù)類型JSON數(shù)據(jù)類型,本節(jié)以前三種數(shù)據(jù)類型為主,最后兩種簡單介紹一下。

1、數(shù)值類型

MySQL支持所有標(biāo)準(zhǔn)SQL數(shù)值數(shù)據(jù)類型。

這些類型包括嚴格數(shù)值數(shù)據(jù)類型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似數(shù)值數(shù)據(jù)類型(FLOAT、REAL和DOUBLE PRECISION)。

關(guān)鍵字INT是INTEGER的同義詞,關(guān)鍵字DEC是DECIMAL的同義詞。

作為SQL標(biāo)準(zhǔn)的擴展,MySQL也支持整數(shù)類型TINYINT、MEDIUMINT和BIGINT。下面的表顯示了需要的每個整數(shù)類型的存儲和范圍。

MySQL 從零開始:05 數(shù)據(jù)類型

1.1 整形數(shù)值


以 TINYINT 為例詳細介紹整形數(shù)值型的一些屬性及操作。

TINYINT[(M)][UNSIGNED][ZEROFILL]

M表示每個值的位數(shù),此處為顯示的位數(shù),并不是占用字節(jié)大小。該可選顯示寬度規(guī)定用于顯示寬度小于指定的列寬度的值時從左側(cè)填滿寬度。當(dāng)結(jié)合可選擴展屬性ZEROFILL使用時, 默認補充的空格用零代替。例如,對于聲明為INT(5) ZEROFILL的列,值5檢索為00005。

注意:M 要與 ZEROFILL 配合使用才有效果。

如果一個數(shù)值列指定為 ZEROFILL, MySQL自動為該列添加 UNSIGNED 屬性。

MySQL 從零開始:05 數(shù)據(jù)類型

1.2 浮點型數(shù)值


對于浮點列類型,在MySQL中單精度值使用4個字節(jié),雙精度值使用8個字節(jié)。

DOUBLE[(M,D)][UNSIGNED][ZEROFILL]

  • M:精度,代表“總位數(shù)”;
  • D:標(biāo)度,代表小數(shù)位(小數(shù)點右邊的位數(shù))

1.3 布爾值


MySQL 沒有內(nèi)置的 BOOLEANBOOL 數(shù)據(jù)類型,使用最小的整數(shù)類型,也就是 TINYINT(1)來表示。

2、日期和時間類型

表示時間值的日期和時間類型為 DATETIME、DATETIMESTAMP、TIMEYEAR。

每個時間類型有一個有效值范圍和一個"零"值,當(dāng)指定不合法的MySQL不能表示的值時使用"零"值。

TIMESTAMP 類型有專有的自動更新特性,將在后面描述。

MySQL 從零開始:05 數(shù)據(jù)類型

注意:

  • 包含兩位數(shù)年份值的日期是不明確的,因為世紀(jì)是未知的,MySQL 使用如下規(guī)則解釋兩位數(shù)的年份值:
  • 年份值在70~99之間轉(zhuǎn)換為1970~1999
  • 年份值在00~69之間轉(zhuǎn)換為2000~2069
  • 通過連接器/ODBC使用的“零”值日期或時間值將自動轉(zhuǎn)換為NULL,因為ODBC無法處理這些值。

3、字符串類型

在MySQL中,字符串可以容納從純文本到二進制數(shù)據(jù)(如圖像或文件)的任何內(nèi)容。 字符串類型指 CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

MySQL 從零開始:05 數(shù)據(jù)類型

3.1 CHAR 和 VARCHAR


CHAR 和 VARCHAR 類型類似,但它們保存檢索的方式不同。它們的最大長度和是否尾部空格被保留等方面也不同。在存儲或檢索過程中不進行大小寫轉(zhuǎn)換。

CHAR和VARCHAR類型聲明時需要一個長度值,該值表示你想要想要存儲的字符的最大數(shù)量。例如,CHAR(30)可以容納30個字符。 CHAR 列的寬度在創(chuàng)建表時已經(jīng)固定下來了,如果插入記錄該字段的寬度不足指定寬度,那么要在右側(cè)自動填補 空格。檢索CHAR值時,除非啟用 PAD_CHAR_TO_FULL_LENGTH SQL模式,否則將刪除尾部空格。

存儲 VARCHAR 值時,不會填充。在與標(biāo)準(zhǔn)SQL一致的情況下,存儲和檢索值時保留尾部空格。

下表展示了CHAR和VARCHAR之間的差異,它展示了將各種字符串值存儲到CHAR(4)和VARCHAR(4)列的結(jié)果(假設(shè)此列使用了一個單字節(jié)字符集,如latin1)。

MySQL 從零開始:05 數(shù)據(jù)類型

請看下面例子:

MySQL 從零開始:05 數(shù)據(jù)類型

01.vchar_varchar

3.2 BINARY 和 VARBINARY


BINARY 和 VARBINARY 類似于 CHAR 和 VARCHAR,不同的是它們包含二進制字符串而不要非二進制字符串。也就是說,它們包含字節(jié)字符串而不是字符字符串。這說明它們沒有字符集,并且排序和比較基于列值字節(jié)的數(shù)值。

3.3 BLOB 和 TEXT


BLOB 是一個二進制大對象,可以容納可變數(shù)量的數(shù)據(jù)。有 4 種 BLOB 類型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它們區(qū)別在于可容納存儲范圍不同。四種 TEXT 類型是TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。它們對應(yīng)于四個 BLOB 類型,并且具有相同的最大長度和存儲要求。

3.4 ENUM 類型


ENUM 是一個字符串對象,它從一個允許值列表中選擇了一個值,這些值在表創(chuàng)建時顯式地列出了列規(guī)范中。它有這些優(yōu)勢:

  • 在一列有有限的可能值集合的情況下,壓縮數(shù)據(jù)存儲。你指定為輸入值的字符串被自動編碼為數(shù)字。
  • 可讀的查詢和輸出。在查詢結(jié)果中,這些數(shù)字被轉(zhuǎn)換回相應(yīng)的字符串。

枚舉值必須是引用的字符串文字。 你可以這樣用枚舉列創(chuàng)建表:

MySQL 從零開始:05 數(shù)據(jù)類型

假如向該表中插入一百萬條 值為 'medium' 的記錄,存儲空間需要一百萬字節(jié)。相比而言,如果以字符串 'medium' 存儲,則需要六百萬字節(jié)。

3.5 SET 類型


SET 是一個字符串對象,可以有0個或多個值,并且每一個值都必須從表創(chuàng)建時指定的允許值列表中選擇。SET 的列值由多個集合成員組成的,用逗號(,)分隔。這樣的話,SET成員值本身不應(yīng)該包含逗號。

例如,由 SET('one', 'two') NOT NULL 指定的數(shù)據(jù)列可以有這些值:

MySQL 從零開始:05 數(shù)據(jù)類型

SET 列最多可以包含64個不同的成員。

看如下例子:

MySQL 從零開始:05 數(shù)據(jù)類型

從查詢結(jié)果可以看出:如果一條記錄里已經(jīng)包含 SET 的一個成員了,就不會重復(fù)保存該值。

4、空間數(shù)據(jù)類型

MySQL支持許多包含各種幾何和地理值的空間數(shù)據(jù)類型,如下表所示:

MySQL 從零開始:05 數(shù)據(jù)類型

5、JSON 數(shù)據(jù)類型

MySQL 支持由 RFC 7159 規(guī)定的原生 JSON 數(shù)據(jù)類型,以更有效地存儲和管理JSON文檔。 本機JSON數(shù)據(jù)類型提供JSON文檔的自動驗證和最佳存儲格式。 JSON 列不能有默認值

MySQL 從零開始:05 數(shù)據(jù)類型

可以看到,如果我們插入的記錄 JSON 數(shù)據(jù)格式不正確是不能成功的。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多