註意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 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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...