
- MySQL 基礎
- MySQL - 首頁
- MySQL - 簡介
- MySQL - 特性
- MySQL - 版本
- MySQL - 變數
- MySQL - 安裝
- MySQL - 管理
- MySQL - PHP 語法
- MySQL - Node.js 語法
- MySQL - Java 語法
- MySQL - Python 語法
- MySQL - 連線
- MySQL - Workbench
- MySQL 資料庫
- MySQL - 建立資料庫
- MySQL - 刪除資料庫
- MySQL - 選擇資料庫
- MySQL - 顯示資料庫
- MySQL - 複製資料庫
- MySQL - 資料庫匯出
- MySQL - 資料庫匯入
- MySQL - 資料庫資訊
- MySQL 使用者
- MySQL - 建立使用者
- MySQL - 刪除使用者
- MySQL - 顯示使用者
- MySQL - 修改密碼
- MySQL - 授予許可權
- MySQL - 顯示許可權
- MySQL - 收回許可權
- MySQL - 鎖定使用者賬戶
- MySQL - 解鎖使用者賬戶
- MySQL 表
- MySQL - 建立表
- MySQL - 顯示錶
- MySQL - 修改表
- MySQL - 重命名錶
- MySQL - 克隆表
- MySQL - 截斷表
- MySQL - 臨時表
- MySQL - 修復表
- MySQL - 描述表
- MySQL - 新增/刪除列
- MySQL - 顯示列
- MySQL - 重新命名列
- MySQL - 表鎖定
- MySQL - 刪除表
- MySQL - 派生表
- MySQL 查詢
- MySQL - 查詢
- MySQL - 約束
- MySQL - 插入查詢
- MySQL - 選擇查詢
- MySQL - 更新查詢
- MySQL - 刪除查詢
- MySQL - 替換查詢
- MySQL - 插入忽略
- MySQL - 插入重複鍵更新
- MySQL - 插入選擇
- MySQL 運算子和子句
- MySQL - Where 子句
- MySQL - Limit 子句
- MySQL - Distinct 子句
- MySQL - Order By 子句
- MySQL - Group By 子句
- MySQL - Having 子句
- MySQL - AND 運算子
- MySQL - OR 運算子
- MySQL - Like 運算子
- MySQL - IN 運算子
- MySQL - ANY 運算子
- MySQL - EXISTS 運算子
- MySQL - NOT 運算子
- MySQL - 不等於運算子
- MySQL - IS NULL 運算子
- MySQL - IS NOT NULL 運算子
- MySQL - Between 運算子
- MySQL - UNION 運算子
- MySQL - UNION 與 UNION ALL
- MySQL - MINUS 運算子
- MySQL - INTERSECT 運算子
- MySQL - INTERVAL 運算子
- MySQL 連線
- MySQL - 使用連線
- MySQL - 內連線
- MySQL - 左連線
- MySQL - 右連線
- MySQL - 交叉連線
- MySQL - 全連線
- MySQL - 自連線
- MySQL - 刪除連線
- MySQL - 更新連線
- MySQL - Union 與 Join
- MySQL 觸發器
- MySQL - 觸發器
- MySQL - 建立觸發器
- MySQL - 顯示觸發器
- MySQL - 刪除觸發器
- MySQL - 插入前觸發器
- MySQL - 插入後觸發器
- MySQL - 更新前觸發器
- MySQL - 更新後觸發器
- MySQL - 刪除前觸發器
- MySQL - 刪除後觸發器
- MySQL 資料型別
- MySQL - 資料型別
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正則表示式
- MySQL - 正則表示式
- MySQL - RLIKE 運算子
- MySQL - NOT LIKE 運算子
- MySQL - NOT REGEXP 運算子
- MySQL - regexp_instr() 函式
- MySQL - regexp_like() 函式
- MySQL - regexp_replace() 函式
- MySQL - regexp_substr() 函式
- MySQL 函式 & 運算子
- MySQL - 日期和時間函式
- MySQL - 算術運算子
- MySQL - 數值函式
- MySQL - 字串函式
- MySQL - 聚合函式
- MySQL 雜項概念
- MySQL - NULL 值
- MySQL - 事務
- MySQL - 使用序列
- MySQL - 處理重複項
- MySQL - SQL 注入
- MySQL - 子查詢
- MySQL - 註釋
- MySQL - 檢查約束
- MySQL - 儲存引擎
- MySQL - 將表匯出到 CSV 檔案
- MySQL - 將 CSV 檔案匯入資料庫
- MySQL - UUID
- MySQL - 公共表表達式
- MySQL - On Delete Cascade
- MySQL - Upsert
- MySQL - 水平分割槽
- MySQL - 垂直分割槽
- MySQL - 遊標
- MySQL - 儲存函式
- MySQL - 訊號
- MySQL - 重新發送訊號
- MySQL - 字元集
- MySQL - 校對規則
- MySQL - 萬用字元
- MySQL - 別名
- MySQL - ROLLUP
- MySQL - 當天日期
- MySQL - 字面量
- MySQL - 儲存過程
- MySQL - Explain
- MySQL - JSON
- MySQL - 標準差
- MySQL - 查詢重複記錄
- MySQL - 刪除重複記錄
- MySQL - 選擇隨機記錄
- MySQL - 顯示 Processlist
- MySQL - 更改列型別
- MySQL - 重置自動遞增
- MySQL - Coalesce() 函式
- MySQL 有用資源
- MySQL - 有用函式
- MySQL - 語句參考
- MySQL - 快速指南
- MySQL - 有用資源
- MySQL - 討論
MySQL - 校對規則
MySQL 校對規則是一組用於決定如何比較和排序字元集的各種字元的規則。MySQL 支援多種字元集,包括 ASCII、Unicode 系統、二進位制等。
這些字元集的每個字元都受制於一個權重。MySQL 校對規則根據其各自的權重對字元進行排序。例如,當在一個字元集中比較兩個字元時,如果一個字元的權重比另一個字元重,則它更大;反之亦然。如果兩個字元的權重相等,則它們相等。
每個字元集必須至少有一個(或多個)校對規則,並且不能有兩個字元集具有相同的校對規則。
實現 MySQL 校對規則
MySQL 實現各種型別的校對規則以比較字元字串 -
8 位字元集的簡單校對規則
8 位字元集的複雜校對規則
非 Unicode 多位元組字元集的校對規則
Unicode 多位元組字元集的校對規則
雜項校對規則
每個字元集都有一個內建的二進位制校對規則,因此不需要重新定義它們。像這樣的內建校對規則在任何情況下都不得修改,以避免伺服器出現意外行為。
8 位字元集的簡單校對規則
- 由於 8 位字元集只能容納最多 256 個字元,因此此型別的校對規則是透過使用長度為 256 的權重陣列來實現的。
- 字元集中的每個字元都與權重一一對映。
- 它是不區分大小寫的校對規則,因此相同字元的大寫和小寫具有相同的權重。
8 位字元集的複雜校對規則
- 對於複雜的 8 位字元集,校對規則是透過使用函式定義字元的順序來實現的。
- 在這裡,我們建立一個 C 原始檔,該檔案指定字元集屬性並定義必要的支援例程以正確地對該字元集執行操作。
非 Unicode 多位元組字元集的校對規則
- 與單位元組(8 位)字元不同,多位元組字元的程式碼和權重之間存在兩種型別的關係。
- 字元的權重等於其程式碼。
- 字元程式碼與權重一一對映,其中權重不一定等於程式碼。
Unicode 多位元組字元集的校對規則
一些校對規則基於 Unicode 校對演算法 (UCA)。它們具有以下屬性 -
- 如果一個字元有權重,則每個權重使用 2 個位元組。
- 如果一個字元沒有權重,則該字元可忽略。
- 單個字元可以有多個權重。這稱為擴充套件。例如,德文字母(SHARP S)的權重為 0x0FEA0FEA。
- 多個字元在一起只能有一個權重。這稱為收縮。例如,“ch”在捷克語中是一個字母,其權重為 0x0EE2。
雜項校對規則
- 不屬於任何先前類別的校對規則稱為雜項校對規則。
設定字元集和校對規則
MySQL 允許我們在三個不同的級別設定字元集和校對規則。下面描述了相同的內容
在伺服器級別
在資料庫級別
在表級別
在伺服器級別
在 MySQL 中,字元集latin1將用作預設字元集。因此,預設校對規則將為latin1_swedish_ci。MySQL 允許我們在伺服器啟動級別更改這些預設設定。
在啟動 MySQL 伺服器時,如果我們指定一個字元集,它將使用該字元集的預設校對規則。但是,如果我們顯式地同時指定字元集和校對規則,則 MySQL 將對進一步建立的所有資料庫使用該組合。
示例
在以下查詢中,我們將字元集設定為 utf8,並將校對規則設定為 utf8_unicode_cs 用於伺服器。
mysqld --character-set-server=utf8 --collation-server=utf8_unicode_cs
如果--collation-server設定為使用者定義的校對規則名稱,則會發出警告。
在資料庫級別
當我們建立一個數據庫並且如果我們沒有提供任何字元集和校對規則時,資料庫將使用伺服器的預設字元集和校對規則。
我們可以使用 CREATE DATABASE 語句在資料庫級別覆蓋預設字元集和校對規則。
如果我們想覆蓋現有資料庫的預設設定,可以使用 ALTER DATABASE 語句。
語法
以下是覆蓋資料庫級別預設設定的基本語法 -
[CREATE | ALTER] DATABASE database_name CHARACTER SET character_set_name COLLATE collation_name;
示例
這裡,我們正在建立一個數據庫,並使用以下查詢將字元集指定為 utf8,並將排序規則指定為 utf8_unicode_ci。
CREATE DATABASE testdb CHARACTER SET utf8 COLLATE utf8_unicode_ci;
在表級別
在 MySQL 中,資料庫可以包含與資料庫字元集和排序規則不同的字元集和排序規則的表。
我們可以在使用 CREATE TABLE 語句建立表時指定預設的字元集和排序規則。
如果我們想覆蓋現有表的預設設定,可以使用 ALTER TABLE 語句。
語法
以下是使用 CREATE TABLE 語句為表指定預設字元集和排序規則的語法:
[CREATE | ALTER] TABLE table_name column_name datatype (length) CHARACTER SET character_set_name COLLATE collation_name
示例
在以下查詢中,我們正在建立一個沒有任何字元集和排序規則的表。因此,它使用資料庫的字元集和排序規則。
CREATE TABLE CUSTOMERS( ID VARCHAR(45), NAME VARCHAR(45), AGE INT );
現在,我們使用 ALTER TABLE 語句將字元集修改為“latin1”,並將排序規則修改為“latin_german_ci”。
ALTER TABLE CUSTOMERS CHARACTER SET latin1 COLLATE latin1_german1_ci;
顯示預設校對規則
我們可以使用 SHOW CHARACTER SET 查詢顯示 MySQL 資料庫伺服器中所有字元集的預設排序規則。
SHOW CHARACTER SET;
使用者定義的排序規則在最新版本的 MySQL 中已棄用。因此,如果在任何 SQL 語句中使用它們,伺服器會發出警告。
每個字元集的排序規則字串以字元集名稱開頭,以 _ci(不區分大小寫)、_cs(區分大小寫)或 _bin(二進位制)結尾。
MySQL LIKE 子句
在 MySQL 中,使用 SHOW COLLATION 語句結合 LIKE 子句,我們可以指定一個模式來獲取與給定模式匹配的排序規則的名稱和其他資訊。
SHOW COLLATION LIKE 'greek%';
輸出
以上查詢返回所有名稱中包含greek的排序規則。
排序規則 | 字元集 | ID | 預設 | 已編譯 | 排序長度 |
---|---|---|---|---|---|
greek_bin | greek | 70 | 是 | 1 | |
greek_general_ci | greek | 25 | 是 | 是 | 1 |
MySQL WHERE 子句
我們可以使用 SHOW COLLATION 語句結合 WHERE 子句來檢索與指定條件匹配的排序規則名稱。
SHOW COLLATION WHERE Charset = 'cp1251';
輸出
以上查詢返回字元集 ID 等於“cp1251”的所有排序規則。
排序規則 | 字元集 | ID | 預設 | 已編譯 | 排序長度 |
---|---|---|---|---|---|
cp1251_bin | cp1251 | 50 | 是 | 1 | |
cp1251_bulgarian_ci | cp1251 | 14 | 是 | 1 | |
cp1251_general_ci | cp1251 | 51 | 是 | 是 | 1 |
cp1251_general_cs | cp1251 | 52 | 是 | 1 | |
cp1251_ukrainian_ci | cp1251 | 23 | 是 | 1 |