MySQL enum字段編程“防坑”指南
MySQL數據庫中的字段類型enum可以是指字段的區間範圍,從而避免向數據庫中插入意想不到的值,
固然這給數據庫設計者來了方便,但容易給編程人員的帶來程序編寫上的bug。因此,程序員需要深
刻了解enum的特徵與特點才能在編程是避免不必要的bug。
正如我最近在編程時遇到的問題一樣,譬如在表中定義了這樣的一個字段
type | enum('0','1','2','3','4','5','6','7','8','9','10','100') | YES | | NULL
用單引號引用起來的是字符串形式的枚舉值,於是很多新手在編程的時候習慣用這樣的語句進
select * from table_name where type='100'
行查詢
select * from table_name
where type=1
select * from table_name where type=1
結果查詢出來的結果是錯誤的,這是因爲enum 按照從左往右以1爲原始值,逐一遞增的規律標識每
個枚舉值,上面一句查詢語句顯示的結果是type=‘-1’的結果。這樣往往會給編程帶來bug。
個枚舉值,上面一句查詢語句顯示的結果是type=‘-1’的結果。這樣往往會給編程帶來bug。
其實,想要查詢type對應的值爲‘-1’的記錄的信息可以這樣查詢
select * from table_name where type='0'
沒錯,在查詢條件匹配時,需要用單引號將匹配的枚舉值引用,這同不用引號而使用枚舉值對應的索是同樣的效果,
但顯然前者更加直觀。
例如,對以上的type字段作爲條件查詢,有
select * from table_name where type= 12
等價於select * from table_name where type=‘100’
因爲這個問題,我查了許多資料才發現癥結所在,因此記錄一下,希望給您有所借鑑。 望每天進步一點