mysql小知識

MySQL 技術 京京肚肚擼代碼 2017-05-23

關鍵字

項目初期, 難免要建好多表, 建表時給字段起名字就是很頭疼的事, 用字段表示含義的拼音首字母是省事了, 但是其他人看到的時候, 就要一臉懵逼了, 這啥玩意兒! 譬如: gnjs, 在大腦裡搜索了好久沒理解, 後來看註釋才知道是表示"功能介紹"!

用英文總行了吧, 但是一不留神就碰到關鍵字了, 下面是我最近碰到的一些關鍵字, 長見識!

name- 名字, 是不是挺常用的, 居然是關鍵字, 好吧, 那我就加個s, 變成names, 誰曾想names也是關鍵字!

abstract - 摘要, 放在SQL語句中, 沒有變色, 看來不是關鍵字, 不過怎麼感覺那麼熟悉! 通過mybatis生成代碼後, 發現代碼報錯, 恍然大悟, 是java關鍵字, 防不勝防...

這裡再列幾個我最近碰到的, 覺得一不留神就用到的: code, type, account, status, comment, interval

總結: 雖然關鍵字可以通過撇號(`)引起來, 但是寫SQL時需要更加小心, 在忘記加時, 執行insert或update時有時會報錯. 我們的做法是儘量避免使用mysql關鍵字, 譬如通過加下劃線(status_)或加前綴(audit_status)的方法來改變字段名稱, 避免潛在的問題.

附錄: mysql官網關鍵字(https://dev.mysql.com/doc/refman/5.7/en/keywords.html)

字符串排序

問: 主鍵id_使用varchar類型存儲, 存儲值是1 - 27, 一共27行數據, 按照id_升序排序, 結果是什麼?

是1, 2, 3, 4, 5, 6... 嗎? 不!

結果是: 1, 10, 11, 12, 13, ..., 17, 18, 19, 2, 20, 21...., 3, 4, 5...

那怎麼才能正確的進行排序呢? 答案是 +0 或 *1 或轉為unsigned

select * from table_name order by cast(id_ as unsigned)

select * from table_name order by id_*1

select * from table_name order by id_+0

MEDIUMBLOB類型

為了存儲一些特殊字符及圖片(如: \\(•ㅂ•)/♥ ), 字段使用了MEDIUMBLOB類型(最大16M), 結果讀取展示出來時, 顯示亂碼.

mysql小知識

二進制圖片

搜索了一番, 發現可以使用convert函數解決該問題, SQL語句如下:

select convert(gnjs using utf8) from table_name

查詢Varchar類型區分大小寫

mysql默認查詢是不區分大小寫的. 譬如: 我想查詢一個列中包含字母IT的行, 我使用:

select * from category where category_name like '%IT%'

或 select * from category where category_name like '%it%'

都是能查到同一條數據的.

如果我只想查詢大寫的IT, 進行區分大小寫精確匹配該字母該怎麼辦呢? 答案是使用BINARY數據類型

方案一: 在建表時就指定該列區分大小寫

如果使用mysql workbench客戶端工具, 可以勾選B這個選項, 表示該字段是binary列

mysql小知識

方案二: 在需要使用到的查詢語句中使用binary對屬性進行修飾

select * from category where binarycategory_name like '%IT%'

下次總結一下最近項目中spring mvc方面的一些內容, 敬請期待.

相關推薦

推薦中...