Mysql:文法:資料類型細節

來源:互聯網
上載者:User

數字

  • 擴充:顯示寬度,僅僅是告訴mysql當指定了顯示寬度的數字字元個數在少於指定的寬度時 是否 以空白填充前面。並不影響其 儲存範圍、大於指定寬度數位顯示。
  • 與顯示寬度配套的擴充:zerofill,是否以”0“代替空格” “去填充。這個0 不影響數字參與的運算式計算;不影響普通的查詢,但可能影響複雜的查詢中用到的暫存資料表資料,mysql總是假定你的寬度設定是合適數位長度的
  • unsigned:禁止儲存負數。對於整數會影響到數位範圍大小。對於其他數字僅僅阻止負數,不影響範圍
  • auto_increment:整數和浮點數均可具有該屬性。當對該列賦值null或0時,該列會在最大值的基礎上 +1
  • ansi標準中的float(n):此處的n只是指明precision,注意不是指明儲存範圍!mysql支援這一文法,但此處的n僅僅決定了需要使用的儲存空間:(0-23)為4位元組單精確度浮點型,(24-53)為8位元組雙精確度浮點型。ansi標準的double(n)與之類似
  • mysql擴充了該類型定義:float(m,d)、real(m,d)、double precision(m,d)  m只整個數位位元——相當於精度;d指小數點後的數字個數——相當於scale。mysql總是四捨五入到指定的d
  • 預設情況下double=real=ansi的double precision類型。如果開啟了real_as_float,real就是float類型了
  • bit(m)本質上就是一個bigint,但他的輸入、顯示形式不同
  • 當一個更大範圍的數字儲存到較小範圍的數字時會發上什嗎?strict 模式下:錯誤!非strict 模式,截斷到合適的值存入!

 

日期時間類型

  • allow_invalid_dates 可以儲存可能錯誤的日期如‘2009-02-30’
  • no_zero_in_datel可以禁止mysql儲存”0“月、”0“日期,如”2009-03-00“
  • mysql5.1.18之前,data 和 dateitme進行比較時,將datetime日期提取出來,和date進行字串比較。之後,將date + '00:00:00變換為datetime,進行值比較
  • no_zero_in_date被禁止的話,可以使用‘0000-00-00’表示虛擬日期,主要是為了方便
  • 儘管mysql可以以多種格式解析日期,但必須是”yyyy-mm-dd“的順序
  • 在數字環境中,日期時間自動以數字值參與計算;反之一樣
  • ”0“日期時間是十分特殊的東西。你可以顯示的引用、查看、併當作‘0’或0使用。myodbc驅動在2.50.12以上會自動轉換為null值
  • 你可以通過非常非常非常靈活的格式指定日期時間值
  1. 分隔字元隨意
  2. 長短格式均可
  3. 沒有分隔字元的數字串也是可以的。這依賴於其位元和數字範圍的有效性
  4. 字串和數字串均可
  5. 函數的計算結果
  6. 在有分隔字元的情況下:每個部分的0是可以省略的
  7. timestamp類型總是以utc日期時間儲存,但總是以當前時區顯示。mysql在內部處理上有一個轉換。

在create table時,第一個timestamp列可以有幾種建立方式:
timestamp預設為not null default current_timestamp on update current_timestamp
如果僅指定了default 而沒有on update,則當前日期時間作為其預設值,但不再自動更新
如果沒有default 而僅指定有on update,則當前日期時間作為0,可自動更新
如果指定了其他default值,指定了on update current_timestamp,則初始化為指定值,自動更新
如果指定了其他default值,沒有指定on update ,則初始化為指定值,不再自動更新
對於不是第一個timestamp列,如果想讓其自動初始化或自動更新為當前日期時間,就必須為第一個timestamp類指定一個其他default值!!
timestamp 不能儲存null值,除非你顯示指定null列約束後 指定default null

 

文本類型

  • char 和varchar 基本上是類似的:區別在於二者的最大儲存長度、儲存是否尾隨空格、擷取是否截掉空格
  • 當指定的字串範圍超過最大字元數時,嚴格sql模式下,如果被截取掉的不是空格,錯誤!非嚴格sql模式下,字串截斷到適合的長度
  • char和varchar總進行字串比較是 永遠不考慮 尾隨空格
  • binary 和 varbinary儲存的僅僅是沒有character set 的字元的數字形式二進位字串(不是bit串),沒有字元集轉換的資訊。注意這和 char varchar類型的binary屬性不同,後者是使用character set 二進位定序的代名詞
  • binary右填充‘0x00’至指定的長度,但擷取是不會截斷‘0x00’
  • enum類型 是一個 value:index 對的有限列表,特殊的null:null,‘’:0。其他為 val1:1、val2:2 .......
  • 當enum用在數字環境時,它自動以其index值參與計算

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.