SQL Server 與MySQL中排序規則與字元集相關知識的一點總結

来源:https://www.cnblogs.com/wy123/archive/2018/07/27/9377676.html
-Advertisement-
Play Games

字元集&&排序規則 字元集是針對不同語言的字元編碼的集合,比如UTF-8字元集,GBK字元集,GB2312字元集等等,不同的字元集使用不同的規則給字元進行編碼排序規則則是在特定字元集的基礎上特定的字元排序方式,排序規則是基於字元集的,是對字元集在排序方式維度上的一個劃分。排序規則是依賴於字元集的,一 ...


 

字元集&&排序規則

字元集是針對不同語言的字元編碼的集合,比如UTF-8字元集,GBK字元集,GB2312字元集等等,不同的字元集使用不同的規則給字元進行編碼
排序規則則是在特定字元集的基礎上特定的字元排序方式,排序規則是基於字元集的,是對字元集在排序方式維度上的一個劃分。
排序規則是依賴於字元集的,一種字元集可以有多種排序規則,但是一種排序規則只能基於某一種字元集的
比如中文字元集,也即漢字,可以按照“拼音排序”、“按姓氏筆劃排序”等等。
而對於英語,就沒有“拼音”和“姓氏筆畫”,但是可以分為區分大小寫、不區分大小寫等等
而其他語言下麵也有自己特定的排序規則。

在SQL Server中,任何一種字元集的資料庫,都能存儲任何一種語言的字元。
並不是說拉丁(Latin)字元集的數據就存儲不了中文,中文(Chinese)字元集的資料庫就存儲不了蒙古語(只要操作系統本身支持)
sqlserver中,不管哪種字元集(實際上是排序規則)的資料庫(或者欄位),都是可以使用nvarchar(或者nchar),而nvarchar(或者nchar)是可以存儲任意非Unicode字元的
至於排序規則,那是根據不同的字元集所支持的不同的排序規則人為定義的。

 

SQL Server中的字元集和排序規則
排序規則只不過是指定了存儲的數據的排序(比較)規則而已,換句話說就是,排序規則中已經包含了字元集的信息。
因此在sqlserver中 ,不需要關心字元集,只需要關心排序規則,sqlserver中在創建只能指定排序規則(不能直接指定字元集),
如截圖,只能指定collation,也就是字元集

 

在MySQL中的字元集和排序規則

上面說了,排序規則是依賴於字元集的,一種字元集可以有多種排序規則,但是一種排序規則只能基於某一種字元集的。
如下是MySQL中排序規則和字元集的對應關係。

MySQL的建庫語法比較扯,可以指定字元集和排序規則,
如果指定的排序規則在字元集的下麵,則是沒有問題的,如果指定的排序規則不在字元集下麵,則會報錯。

比如下麵這一句,排序規則utf8_bin是屬於字元集utf8下麵的一種排序規則,這個語句執行是沒有問題的
create database test_database2 charset utf8 collate utf8_bin;
再比如下麵這一句,排序規則latin1_bin不是屬於字元集utf8下麵的一種排序規則,這個語句執行是會報錯的
create database test_database2 charset utf8 collate latin1_bin;

以上是字元集和排序規則在sqlserver和MySQL中的一些基本應用,再說說常用的排序規則的區別

 

***_genera_ci & ***_genera_cs & ***_bin 常見排序規則的特點

以上是某種字元集下常用的三種排序規則,下麵以常見的utf8為例說明
utf8_genera_ci不區分大小寫,ci為case insensitive的縮寫,即大小寫不敏感,
utf8_general_cs區分大小寫,cs為case sensitive的縮寫,即大小寫敏感,但是目前MySQL版本中已經不支持類似於***_genera_cs的排序規則,直接使用utf8_bin替代。
utf8_bin將字元串中的每一個字元用二進位數據存儲,區分大小寫。
那麼,同樣是區分大小寫,utf8_general_cs和utf8_bin有什麼區別?
cs為case sensitive的縮寫,即大小寫敏感;bin的意思是二進位,也就是二進位編碼比較。
utf8_general_cs排序規則下,即便是區分了大小寫,但是某些西歐的字元和拉丁字元是不區分的,比如ä=a,但是有時並不需要ä=a,所以才有utf8_bin
utf8_bin的特點在於使用字元的二進位的編碼進行運算,任何不同的二進位編碼都是不同的,因此在utf8_bin排序規則下:ä<>a

在utf8_genera_ci的情況下A=a,ä=a

 

 在utf8_bin排序規則下,A<>a,ä<>a

 

所以要想區分大小寫,有沒有特殊需求,就直接使用utf8_bin(實際上***_general_cs在MySQL中本身就不支持,在SQL Server中支持)
以上字元集的特點以及使用情況在SQL Server中表現為類似。

 

以上。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 需要註意的是: 1.需要在當前目錄下創建hosts.txt文件,文件內容格式為: https://www.baidu.com,百度首頁 https://www.trc.com,泰然城首頁 https://www.jd.com,京東商城 2.ding_url換成自己的釘釘機器人webhook鏈接,也可 ...
  • 昨天已實現一個模擬器的原型. 模擬器的基本原理是, 用另外一種方式實現所有腳本會訪問到的API , 然後把腳本操作的數據, 在網頁上展現出來. 模擬器可以覆蓋大部分開發的情況, 在不使用硬體前就把代碼調試好. 開發速度會更上一個臺階. 下一個階段是完善各種硬體介面, TCP/HTTP/WebSock ...
  • 系列目錄 一、安裝MySql 二、安裝並破解Navicat 三、沒有my.in配置文件怎麼辦 四、設置MySql的大小寫敏感 五、重置MySql登陸密碼 之前說過,Windows操作系統中,我們安裝Mysql有兩個選擇:一是下載MSI點擊運行,利用windows系統安裝程式的方法按部就班的來安裝;二 ...
  • 過程,函數,觸發器是PL/SQL編寫的,存儲在oracle中的.PL/SQL是非常強大的資料庫過程語言. PL/SQL優點:性能,模塊化,網路傳輸量,安全性缺點:移植性不好 簡單分類:塊:過程,函數,觸發器,包 Demo:create or replace procedure sp01 isbegi ...
  • 占座 ...
  • 轉自:http://www.maomao365.com/?p=6965 摘要: 下文將分享兩種將欄位中null值替換為指定值的方法分享,如下所示: 實驗環境:sqlserver 2008 R2 例: ...
  • 一、 約束的含義和分類 1.1約束的含義:是一種限制,用於限製表中的數據,保證數據的完整性和一致性。 1.2約束的分類: ①not null:非空,保證欄位不能為空。違反約束不會報錯,但是會有警告,適用於說有的類型。 ②default:預設約束,當數據插入的時候,指定的欄位如果沒有數據插入,即插入默 ...
  • 一、增加(create add insert )1,create操作庫 create database 庫名 新建庫 create database 庫名 character set 編碼表 2,create 操作表結構 新建表: create table 表名( id int primary ke ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...