冷知識點:COLLATE 關鍵字是什么意思?


mysql 數據庫表:

CREATE TABLE `book_order_test` (
  `order_id` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '訂單id',
  `payment` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '實付金額。精確到2位小數;單位:元。如:200.07,表示:200元7分',
  `payment_type` int(2) DEFAULT NULL COMMENT '支付類型,1、在線支付,2、貨到付款',
  `post_fee` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '郵費。精確到2位小數;單位:元。如:200.07,表示:200元7分',
  `status` int(10) DEFAULT NULL COMMENT '狀態:1、未付款,2、已付款,3、未發貨,4、已發貨,5、交易成功,6、交易關閉',
  `create_time` datetime DEFAULT NULL COMMENT '訂單創建時間',
  `update_time` datetime DEFAULT NULL COMMENT '訂單更新時間',
  `payment_time` datetime DEFAULT NULL COMMENT '付款時間',
  `consign_time` datetime DEFAULT NULL COMMENT '發貨時間',
  `end_time` datetime DEFAULT NULL COMMENT '交易完成時間',
  `close_time` datetime DEFAULT NULL COMMENT '交易關閉時間',
  `shipping_name` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '物流名稱',
  `shipping_code` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '物流單號',
  `user_id` bigint(20) DEFAULT NULL COMMENT '用戶id',
  `buyer_message` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '買家留言',
  `buyer_nick` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '買家昵稱',
  `buyer_rate` int(2) DEFAULT NULL COMMENT '買家是否已經評價',
  UNIQUE KEY `order_id` (`order_id`) USING BTREE,
  KEY `create_time` (`create_time`),
  KEY `buyer_nick` (`buyer_nick`),
  KEY `status` (`status`),
  KEY `payment_type` (`payment_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

 

COLLATE 關鍵字是什么意思?

關鍵字

collation_name

按照二進制編碼比較排序,主要是對字符集之間的比較和排序,可以通過 show collation查看所有的校對集。

官方解釋:是應用於表達式、列定義或數據庫定義的排序規則的名稱。

 

collate的名字包括兩部分,前部分是表示字符集,后部分定義如下:

分類 說明
_BIN 指定使用向后兼容的二進制排序順序。
_BIN2 指定使用 SQL Server 2005中引入的碼位比較語義的二進制排序順序。
_CI(CS) 是否區分大小寫,CI不區分,CS區分
_AI(AS) 是否區分重音,AI不區分,AS區分
_KI(KS) 是否區分假名類型,KI不區分,KS區分
_Stroke 按筆划排序
_WI(WS) 是否區分全半角,WI不區分,WS區分

還可以根據拼音,筆畫來排序。

如何設置排序規則

可以在數據庫(create database/alter database時指定),字段級別(create table/alter table時指定)使用Collate命令設置collate,字段級別優先級更高

 

語法

語法 
COLLATE < collation_name >

< collation_name > ::= 
    { Windows_collation_name } | { SQL_collation_name }

 

參數

collation_name

可以只是指定的 Windows_collation_name 或 SQL_collation_name。

  • Windows_collation_name

是 Windows 排序規則的排序規則名稱。請參見 Windows 排序規則名稱。

  • SQL_collation_name

SQL 排序規則的排序規則名稱。請參見 SQL 排序規則名稱。

注釋

COLLATE 子句可以在幾個級別上指定,包括以下級別:

  • 創建或更改數據庫。

可以使用 CREATE DATABASE 或 ALTER DATABASE 語句的 COLLATE 子句指定數據庫的默認排序規則。還可在創建數據庫時使用 SQL Server 企業管理器指定排序規則。如果不指定排序規則,則將為數據庫指派 SQL Server 實例的默認排序規則。

  • 創建或更改表列。

可以使用 CREATE TABLE 或 ALTER TABLE 語句的 COLLATE 子句指定每個字符串列的排序規則。還可在創建表時使用 SQL Server 企業管理器指定排序規則。如果不指定排序規則,將為列指派數據庫的默認排序規則。

還可使用 COLLATE 子句中的 database_default 選項,指定臨時表中的列使用連接的當前用戶數據庫(而不是 tempdb)的默認排序規則。

  • 投影表達式的排序規則。

可以使用 COLLATE 子句將字符表達式投影到特定的排序規則。將為字符字面值和變量指派當前數據庫的默認排序規則。將為列引用指派列的定義排序規則。有關表達式排序規則的信息,請參見排序規則的優先順序。


標識符的排序規則取決於定義標識符時所在的級別。為實例級對象(如登錄名和數據庫名)的標識符指派實例的默認排序規則。為數據庫對象(如表、視圖和列名)的標識符指派數據庫的默認排序規則。例如,對於名稱差別僅在於大小寫的兩個表,可在使用區分大小寫排序規則的數據庫中創建,而不能在使用不區分大小寫排序規則的數據庫中創建。

當連接上下文與數據庫相關時,可以創建變量、GOTO 標簽、臨時存儲過程和臨時表,且當已將上下文切換到其它數據庫時引用它們。變量、GOTO 標簽、臨時存儲過程和臨時表的標識符在實例的默認排序規則中。

COLLATE 子句只能應用於 char、varchar、text、nchar、nvarchar 和 ntext 數據類型。

排序規則一般由排序規則名標識。例外情況是:在安裝過程中沒有為 Windows 排序規則指定排序規則名稱,而是指定排序規則指示器,然后選擇復選框以指定區分或不區分大小寫和重音的二進制排序或字典排序。

可以執行系統函數 fn_helpcollations 以檢索 Windows 排序規則和 SQL 排序規則的所有有效排序規則名稱的列表:

SELECT *
FROM ::fn_helpcollations()

 

SQL Server 只支持由基礎操作系統支持的代碼頁。

當執行依賴排序規則的操作時,被引用對象所使用的 SQL Server 排序規則必須使用計算機上運行的操作系統所支持的代碼頁。

這些操作可包括:

  • 當創建或更改數據庫時,為數據庫指定默認排序規則。

  • 當創建或更改表時,為列指定默認排序規則。

  • 當還原或附加數據庫時,操作系統必須支持數據庫的默認排序規則,並支持數據庫中的任何 char、varchar 和 text 列或參數的排序規則。

支持 char 和 varchar 數據類型的代碼頁轉換,但是不支持 text 數據類型的代碼頁轉換。不報告代碼頁轉換過程中的數據丟失。

如果被引用的對象所使用或指定的排序規則使用 Windows® 不支持的代碼頁,則 SQL Server 將發出錯誤信息。

參考文檔:

官方文檔1

官方文檔2

 

over


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM