首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 常見問題精選:字符集、引擎選型、特殊表名、校對規則

     編輯:MySQL 資料庫相關知識

MySQL 避坑指南:字符集校對、引擎差異、特殊表名、權限系統表

1. utf8_bin vs utf8_general_ci

  • _ci = Case Insensitive(大小寫不敏感),'a' = 'A'
  • _bin = Binary(二進制比較),'a' != 'A'
  • 查詢 WHERE txt = 'a':_ci 能匹配 'A',_bin 不能

2. MyISAM vs InnoDB 核心差異(深度版)

特性MyISAMInnoDB
事務不支援支援 (ACID)
鎖粒度表鎖行鎖
外鍵不支援支援
全文索引支援 (5.6+ InnoDB 也支援)5.6+ 支援
COUNT(*)O(1) 讀元數據O(N) 掃描表
AUTO_INCREMENT可建聯合索引必須單列索引
DELETE 表重建表逐行刪除
LOAD DATA MASTER支援不支援
崩潰恢復需 REPAIRRedo Log 自動恢復

作者觀點:為何大平台仍首選 MyISAM

  1. 讀多寫少場景,MyISAM 讀效能更強
  2. 索引壓縮,內存利用率高,可載入更多熱索引
  3. 物理文件拷貝備份/恢復極快(InnoDB 需導出 SQL)
  4. COUNT(*)、ORDER BY 高頻,MyISAM 不鎖表
  5. Merge 引擎支援跨分區聚合查詢
  6. 架構層面可通過分庫分表彌補寫入短板

適用 InnoDB 場景:需事務(如交易、庫存)、需外鍵、高併發寫入且行鎖收益大。

3. utf8_general_ci vs utf8_unicode_ci

  • unicode_ci:準確支援 Unicode 排序規則(如德語 ß=ss)、較慢
  • general_ci:簡化比較(逐字節)、速度快、德語 ß=s(不準)
  • 多數應用 general_ci 足夠,新建庫預設推薦

4. 表名/欄位名含特殊字符


SELECT * FROM books WHERE `book-id` = 'b001';  -- 反引號 ` ` 包裹
SELECT * FROM `book-cate`;
  • 反鍵 ` `(鍵盤 1 左側),非單引號
  • **最佳實踐**:命名用下劃線 book_id,避免特殊字符

5. 權限系統 5 張表

表作用
user全局權限、連接認證
db庫級權限
host主機級權限(配合 db)
tables_priv表級權限
columns_priv列級權限

遇到 SELECT command denied ... for table 'proc' → 需 GRANT SELECT ON mysql.proc TO 'user'@'%';

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved