MySQL數據庫中tinyint類型字段讀取數據為true和false


今天遇到這么一個問題,公司最近在做一個活動,然后數據庫需要建表,其中有個字段是關於獎勵發放的狀態的字段,結果讀取出來的值為true

一、解決讀取數據為true/false的問題

場景:

  字段:status (值為1,2,3)

  類型:tinyint  長度:1(有符號的)

  結果:查詢出來的數據列表,狀態值不管是1還是2還是3,都是"boolean true"

分析並解決:

  分析:由於MySql中沒有boolean類型,所以會用到tinyint[1]類型來表示,在mysql中boolean=tinyint[1]

  解決:tinyint類型長度的問題,當我把長度改成4時,查詢結果就正常了

猜想並使用新的方法解決:

  如果不改變類型的長度,怎么讓查詢的結果正確呢?需要在查詢語句上面做修改了

  在你需要執行的sql語句中,把這個狀態字段*1,結果就會得到數據庫存的值了(注意:記得加別名,不然查詢出來的就是status*1 => '1')

SELECT
    id,
    name,
    status*1 AS status,
    add_time
FROM
    tableName
WHERE
    play_type = 0

總結一下以上的兩種解決方法:

  1.修改tinyint類型的長度

  2.在查詢的sql語句上面做修改

二、擴展一下tinyint[1]

  關於tinyint[1]在官網里邊有一段話:

  ?115,72005,72005

  Which would be the more optimzed way to store a boolean, TINYINT(1) or ENUM( 'true' , 'false')? It seems that when storing an enum w/ two settings should only take up one bit, 0 or 1, but would spend more time looking up the enums in the beginning of the query. tinyint(1) however would take up 4 bits assuming it ranged 0-9. So it seems if you just wanted to fetch the value, tinyint(1) would be faster, but if you are searching through lots of records enum('true','false') would be faster. Do you concur??

  翻譯過來如下:

    TINYINT(1)或ENUM('真','假')?

    用ENUM枚舉當存儲只有2個值時只占用一個位的寬度,0或1,但會花更多的時間去尋找了枚舉查詢的開始。

    用TINYINT(1)默認就會占用4個位的寬度(0000)

    得出結論:

      比如要存儲一個介於0-9之間的值,為了查詢獲取這個值,建議用TINYINT(1)會更快,

           但如果你是為了大量記錄枚舉(“真”,“假”),那么用ENUM( 'true' , 'false') 搜索會更快。

  所以由這里可以看出,當你使用tinyint[1]來存儲超過0,1兩個值以外的值,比如存儲2,那這個2就是臟數據,tinyint[1]只適用於存儲0和1兩個值,也即真和假,true和false

  一般的,咱們如果存的是純數字的話,建議用tinyint,如果是字符串,且是固定長度的,建議用char,而enum的枚舉字段,使用的使用需要慎重考慮,避免帶來不必要的麻煩


免責聲明!

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



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