註意Vietnamese_CI_AS排序規則下的特殊字元大小敏感問題

来源:http://www.cnblogs.com/kerrycode/archive/2017/11/03/7779151.html
-Advertisement-
Play Games

註意Vietnamese_CI_AS排序規則下的特殊字元大小敏感問題 最近,在SQL Server中遇到了Vietnamese_CI_AS排序規則的特殊字元的大小寫敏感問題,是的,你沒有看錯,這句話並沒有語病(DBA老司機懂的)。遇到這個特殊情況的時候,我也大跌眼鏡,顛覆我的一些常識,OK,閑話少說... ...


註意Vietnamese_CI_AS排序規則下的特殊字元大小敏感問題

 

最近,在SQL Server中遇到了Vietnamese_CI_AS排序規則的特殊字元的大小寫敏感問題,是的,你沒有看錯,這句話並沒有語病(DBA老司機懂的)。遇到這個特殊情況的時候,我也大跌眼鏡,顛覆我的一些常識,OK,閑話少說,我們來演示一下這個特殊場景下出現的特殊情況。

 

準備測試環境:

 

    伺服器排序規則(Server Collation           Latin1_General_CI_AS

    資料庫排序規則(Database Collation)      :   Vietnamese_CI_AS

 

註意,只有在這個特定排序規則下才會出現這個問題,準備好了測試環境後,我們先簡單聊幾句關於排序規則的知識,SQL Server裡面的排序規則其實是包含了字元集和排序規則兩樣東西,不像MySQL,字元集和排序規則概念和設置分開。如果你想查看某個排序規則對應的字元集,那麼就可用下麵的SQL語句查看。如下截圖所示:

   

SELECT  COLLATIONPROPERTY('Vietnamese_CI_AS', 'CodePage')                AS CodePage ,
        COLLATIONPROPERTY('Vietnamese_CI_AS', 'ComparisonStyle')        AS ComparisonStyle ,
        COLLATIONPROPERTY('Chinese_PRC_CI_AS', 'CodePage')                AS CodePage ,
        COLLATIONPROPERTY('Chinese_PRC_CI_AS', 'ComparisonStyle')        AS ComparisonStyle ,
        COLLATIONPROPERTY('SQL_Latin1_General_CP1_CI_AS', 'CodePage')    AS CodePage ,
        COLLATIONPROPERTY('SQL_Latin1_General_CP1_CI_AS', 'ComparisonStyle') AS ComparisonStyle

 

 

clip_image001[4]

 

 

 

 

 

 

 

 

 

 

 

Code Page

Language

 

932

Japanese

日語

936

Simplified Chinese

簡體中文

949

Korean

韓文

950

Traditional Chinese

繁體中文

1258

Vietnamese

越南語

 

從上可以看到Chinese_PRC_CI_AS的編碼為936,如果對編碼比較熟悉的就很清楚,但是可能也有一些對這個不太瞭解。下麵簡單述說一下,

 

 

 所謂代碼頁(code page)就是針對一種語言文字的字元編碼。例如GBK的code page是CP936 ,BIG5的code page是CP950,GB2312的code page是CP20936。

 

 GBK是國家標準GB2312基礎上擴容後相容GB2312的標準。GBK的文字編碼是用雙位元組來表示的,即不論中、英文字元均使用雙位元組來表示,為了區分中文,將其最高位都設定成1。GBK包含全部中文字元,是國家編碼,通用性比UTF8差,不過UTF8占用的資料庫比GBK大。

 

UTF-8:Unicode TransformationFormat-8bit,允許含BOM,但通常不含BOM。是用以解決國際上字元的一種多位元組編碼,它對英文使用8位(即一個位元組),中文使用24位(三個位元組)來編碼。UTF-8包含全世界所有國家需要用到的字元,是國際編碼,通用性強。UTF-8版本雖然具有良好的國際相容性,但中文需要比GBK/BIG5版本多占用50%的資料庫存儲空間。

 

排序規則的後半部份即尾碼 含義:

_BIN            指定使用向後相容的二進位排序順序。

_BIN2         指定使用 SQL Server 2005 中引入的碼位比較語義的二進位排序順序。

_Stroke     按筆劃排序

_CI(CS)     是否區分大小寫,CI不區分,CS區分(case-insensitive/case-sensitive)

_AI(AS)     是否區分重音,AI不區分,AS區分(accent-insensitive/accent-sensitive)

_KI(KS)     是否區分假名類型,KI不區分,KS區分(kanatype-insensitive/kanatype-sensitive)

_WI(WS)     是否區分全半形, WI不區分,WS區分(width-insensitive/width-sensitive)

 

好了,簡單概述了一些關於編碼和字元集的知識。那麼我們來看看Vietnamese_CI_AS的Code Page為1258,這個是越南語言的一個字元集,很多人可能沒有用過這個,不過沒有關係。那麼我們先來看看問題。準備測試環境和數據,如下所示

 

 

 

USE  TEST;

GO

 

CREATE TABLE TEST (name NVARCHAR(12));

 

INSERT INTO TEST

SELECT N'lienht' UNION ALL

SELECT N'LienHT' UNION ALL

SELECT N'LienHt'

 

 

SELECT * FROM TEST WHERE name ='lienHt';

SELECT * FROM TEST WHERE name ='lienht'

SELECT * FROM TEST WHERE name ='LIenht'

SELECT * FROM TEST WHERE name ='LIeNht'

 

 

 

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

-Advertisement-
Play Games
更多相關文章
  • 我最近在做一個vue + element-UI + vue-resource + vuex項目的時候,遇到了一個對象的問題。 當我們在項目需要 複製一個對象到另一個對象並且 被覆制的對象不能受複製後的對象的影響。 我先總結下 我們哪些方法可以複製對象 以上的方法中 都可以把一個對象的鍵值賦值給另一個 ...
  • 前幾天看到這樣的問題 先說問題吧:感覺前端涉及到的東西太多了,自己也很浮躁,看了挺多書,可是代碼缺敲得卻不多。技術菜,又什麼都想學,比如現在糾結要不要先學scss或者php或者angularjs,backbone等框架,還是深入學習html5+css3? 然後看了一些招聘要求發現又有一些坑要填,經常 ...
  • 阿裡雲oss上傳圖片的時候報錯如上, 解決辦法,把系統時間自動同步成對應的時區的時間。 ...
  • 實現效果: 實現原理: 給關閉按鈕綁定點擊事件,點擊以後觸發動畫效果。利用jQuery的animate方法,先讓顯示天氣的盒子高度變為0,接著讓整個包含天氣和事件的盒子寬度變為0,最後通過將display屬性值設為none,使得close按鈕消失。 實現代碼: ...
  • 一、函數聲明、函數表達式、匿名函數1.函數聲明:function fnName () {…};使用function關鍵字聲明一個函數,再指定一個函數名,叫函數聲明。2.函數表達式 var fnName = function () {…};使用function關鍵字聲明一個函數,但未給函數命名,最後將 ...
  • 最近在搞一個被很多人改了的框架,天天看代碼看的頭的暈了,不過感覺進步還挺大的,自己做了一個後臺可配置前臺查看兩個庫不同數據範圍的東西,還挺滿意,那天拿出來分享一下,今天先說一個這幾天做的功能,就是html頁面的查找功能。 這個功能主要是實現在查找框內輸入字元,之後按後面的上一個下一個按鈕,會自動把查 ...
  • 簡介 onunload,onbeforeunload都是在刷新或關閉時調用,可以在<script>腳本中通過 window.onunload來調用。區別在於onbeforeunload在onunload之前執行,它還可 以阻止onunload的執行。 onbeforeunload 是正要去伺服器讀 ...
  • 項目中需要調用webservice介面,android SDK中並沒有直接訪問webservice介面的方法,於是我引入了ksoap-android的jar包,來實現訪問webservice介面。剛開始一切還都比較順利,成功從webservice介面獲取到了返回的數據,直接運行在手機上一切也都正常。 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 推薦一款基於.NET 8、WPF、Prism.DryIoc、MVVM設計模式、Blazor以及MySQL資料庫構建的企業級工作流系統的WPF客戶端框架-AIStudio.Wpf.AClient 6.0。 項目介紹 框架採用了 Prism 框架來實現 MVVM 模式,不僅簡化了 MVVM 的典型 ...
  • 先看一下效果吧: 我們直接通過改造一下原版的TreeView來實現上面這個效果 我們先創建一個普通的TreeView 代碼很簡單: <TreeView> <TreeViewItem Header="人事部"/> <TreeViewItem Header="技術部"> <TreeViewItem He ...
  • 1. 生成式 AI 簡介 https://imp.i384100.net/LXYmq3 2. Python 語言 https://imp.i384100.net/5gmXXo 3. 統計和 R https://youtu.be/ANMuuq502rE?si=hw9GT6JVzMhRvBbF 4. 數 ...
  • 本文為大家介紹下.NET解壓/壓縮zip文件。雖然解壓縮不是啥核心技術,但壓縮性能以及進度處理還是需要關註下,針對使用較多的zip開源組件驗證,給大家提供個技術選型參考 之前在《.NET WebSocket高併發通信阻塞問題 - 唐宋元明清2188 - 博客園 (cnblogs.com)》講過,團隊 ...
  • 之前寫過兩篇關於Roslyn源生成器生成源代碼的用例,今天使用Roslyn的代碼修複器CodeFixProvider實現一個cs文件頭部註釋的功能, 代碼修複器會同時涉及到CodeFixProvider和DiagnosticAnalyzer, 實現FileHeaderAnalyzer 首先我們知道修 ...
  • 在軟體行業,經常會聽到一句話“文不如表,表不如圖”說明瞭圖形在軟體應用中的重要性。同樣在WPF開發中,為了程式美觀或者業務需要,經常會用到各種個樣的圖形。今天以一些簡單的小例子,簡述WPF開發中幾何圖形(Geometry)相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 在 C# 中使用 RabbitMQ 通過簡訊發送重置後的密碼到用戶的手機號上,你可以按照以下步驟進行 1.安裝 RabbitMQ 客戶端庫 首先,確保你已經安裝了 RabbitMQ 客戶端庫。你可以通過 NuGet 包管理器來安裝: dotnet add package RabbitMQ.Clien ...
  • 1.下載 Protocol Buffers 編譯器(protoc) 前往 Protocol Buffers GitHub Releases 頁面。在 "Assets" 下找到適合您系統的壓縮文件,通常為 protoc-{version}-win32.zip 或 protoc-{version}-wi ...
  • 簡介 在現代微服務架構中,服務發現(Service Discovery)是一項關鍵功能。它允許微服務動態地找到彼此,而無需依賴硬編碼的地址。以前如果你搜 .NET Service Discovery,大概率會搜到一大堆 Eureka,Consul 等的文章。現在微軟為我們帶來了一個官方的包:Micr ...
  • ZY樹洞 前言 ZY樹洞是一個基於.NET Core開發的簡單的評論系統,主要用於大家分享自己心中的感悟、經驗、心得、想法等。 好了,不賣關子了,這個項目其實是上班無聊的時候寫的,為什麼要寫這個項目呢?因為我單純的想吐槽一下工作中的不滿而已。 項目介紹 項目很簡單,主要功能就是提供一個簡單的評論系統 ...