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

MySQL 校對規則引發的查詢錯誤分析與修正

     編輯:MySQL 資料庫相關知識

問題重現

latin1 字元集的表,SELECT to_id FROM test WHERE to_id='cn象_王' 同時返回 cn陶_陶 與 cn象_王。HEX 編碼確認不同,MySQL 卻視為相同。

原因分析

系統變數 collation_connection/database/server 均為 latin1_swedish_ci。手動改為 latin1_bin 不生效,因建表時指定 CHARACTER SET 但未指定 COLLATE,MySQL 採用該字元集預設校對規則(latin1_swedish_ci)。

Collation 選擇規則

  1. 指定 CHARACTER SET X 和 COLLATE Y → 採用 X 和 Y
  2. 僅指定 CHARACTER SET X → 採用 X 及其預設校對規則
  3. 皆未指定 → 採用伺服器字元集與校對規則

解決方式

ALTER TABLE db_allot CONVERT TO CHARACTER SET latin1 COLLATE latin1_bin; 即可修正,無需重建表。建議統一採用字元集對應的 _bin 校對規則,避免比較錯誤。

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