SQL Server不區分大小寫的問題
阿新 • • 發佈:2019-02-18
(1) 先改資料庫結構
預設情況下,SQL Server不區分大小寫,如果資料表TEST的TNAME列中有資料“abcd”和“Abcd”, 如果使用查詢語句:select * from test where tname like 'a%',則查詢的結果會把上面的兩條記錄都查詢出來,這一點上和Oracle有區別.
可以通過設定排序規使其區分大小寫,可以分別在建立資料庫、修改資料庫、建立表的字元型列(char\varchar\nchar\nvarchar等)時指定排序規則來實現。如
create database test COLLATE Chinese_PRC_CS_AS --這樣建立的資料庫中區分大小寫
alter database test COLLATE Chinese_PRC_CS_AS --修改後的資料庫中區分大小寫
Create table test(tid int primary key,tname varchar(20) collate chines_prc_cs_as) --這樣建立的tname列在使用SELECT 語句時就可以區分大小寫了。
(2) 修改資料庫表結構
安裝資料庫時沒有設定為大小寫區分,寫SQL語句要用到大小寫區分,故用了以下方式,如有其它方法,請大家指點
區分大小寫:select * from table where col='semye' collate Chinese_PRC_CS_AI
不區分大小寫:select * from table where col='semye' collate Chinese_PRC_CI_AI
為了便於自己的學習和理解,轉載了以下文章:
我們在create table時經常會碰到這樣的語句,例如:password nvarchar(10)collate chinese_prc_ci_as null,那它到底是什麼意思呢?不妨看看下面:
首先,collate是一個子句,可應用於資料庫定義或列定義以定義排序規則,或應用於字串表示式以應用排序規則投影。
語法是collate collation_name
collation_name ::={windows_collation_name}|{sql_collation_name}
引數collate_name是應用於表示式、列定義或資料庫定義的排序規則的名稱。collation_name 可以只是指定的 Windows_collation_name 或 SQL_collation_name。
Windows_collation_name 是 Windows 排序規則的排序規則名稱。參見 Windows 排序規則名稱。
SQL_collation_name 是 SQL 排序規則的排序規則名稱。參見 SQL 排序規則名稱。
下面簡單介紹一下排序規則:
什麼叫排序規則呢?MS是這樣描述的:"在 Microsoft SQL Server 2000 中,
字串的物理儲存由排序規則控制。排序規則指定表示每個字元的位模式以及存
儲和比較字元所使用的規則。" 在查詢分析器內執行下面語句,可以得到SQL SERVER支援的所有排序規則。select * from ::fn_helpcollations()
排序規則名稱由兩部份構成,前半部份是指本排序規則所支援的字符集。
如:
Chinese_PRC_CS_AI_WS
前半部份:指UNICODE字符集,Chinese_PRC_指標對大陸簡體字UNICODE的排序規則。
排序規則的後半部份即字尾 含義:
_BIN 二進位制排序
_CI(CS) 是否區分大小寫,CI不區分,CS區分
_AI(AS) 是否區分重音,AI不區分,AS區分
_KI(KS) 是否區分假名型別,KI不區分,KS區分
_WI(WS) 是否區分寬度 WI不區分,WS區分
區分大小寫:如果想讓比較將大寫字母和小寫字母視為不等,請選擇該選項。
區分重音:如果想讓比較將重音和非重音字母視為不等,請選擇該選項。如果選擇該選項,
比較還將重音不同的字母視為不等。
區分假名:如果想讓比較將片假名和平假名日語音節視為不等,請選擇該選項。
區分寬度:如果想讓比較將半形字元和全形字元視為不等,請選擇該選項。
預設情況下,SQL Server不區分大小寫,如果資料表TEST的TNAME列中有資料“abcd”和“Abcd”, 如果使用查詢語句:select * from test where tname like 'a%',則查詢的結果會把上面的兩條記錄都查詢出來,這一點上和Oracle有區別.
可以通過設定排序規使其區分大小寫,可以分別在建立資料庫、修改資料庫、建立表的字元型列(char\varchar\nchar\nvarchar等)時指定排序規則來實現。如
create database test COLLATE Chinese_PRC_CS_AS --這樣建立的資料庫中區分大小寫
alter database test COLLATE Chinese_PRC_CS_AS --修改後的資料庫中區分大小寫
Create table test(tid int primary key,tname varchar(20) collate chines_prc_cs_as) --這樣建立的tname列在使用SELECT 語句時就可以區分大小寫了。
(2) 修改資料庫表結構
安裝資料庫時沒有設定為大小寫區分,寫SQL語句要用到大小寫區分,故用了以下方式,如有其它方法,請大家指點
區分大小寫:select * from table where col='semye' collate Chinese_PRC_CS_AI
不區分大小寫:select * from table where col='semye' collate Chinese_PRC_CI_AI
為了便於自己的學習和理解,轉載了以下文章:
我們在create table時經常會碰到這樣的語句,例如:password nvarchar(10)collate chinese_prc_ci_as null,那它到底是什麼意思呢?不妨看看下面:
首先,collate是一個子句,可應用於資料庫定義或列定義以定義排序規則,或應用於字串表示式以應用排序規則投影。
語法是collate collation_name
collation_name ::={windows_collation_name}|{sql_collation_name}
引數collate_name是應用於表示式、列定義或資料庫定義的排序規則的名稱。collation_name 可以只是指定的 Windows_collation_name 或 SQL_collation_name。
Windows_collation_name 是 Windows 排序規則的排序規則名稱。參見 Windows 排序規則名稱。
SQL_collation_name 是 SQL 排序規則的排序規則名稱。參見 SQL 排序規則名稱。
下面簡單介紹一下排序規則:
什麼叫排序規則呢?MS是這樣描述的:"在 Microsoft SQL Server 2000 中,
字串的物理儲存由排序規則控制。排序規則指定表示每個字元的位模式以及存
儲和比較字元所使用的規則。"
排序規則名稱由兩部份構成,前半部份是指本排序規則所支援的字符集。
如:
Chinese_PRC_CS_AI_WS
前半部份:指UNICODE字符集,Chinese_PRC_指標對大陸簡體字UNICODE的排序規則。
排序規則的後半部份即字尾 含義:
_BIN 二進位制排序
_CI(CS) 是否區分大小寫,CI不區分,CS區分
_AI(AS) 是否區分重音,AI不區分,AS區分
_KI(KS) 是否區分假名型別,KI不區分,KS區分
_WI(WS) 是否區分寬度 WI不區分,WS區分
區分重音:如果想讓比較將重音和非重音字母視為不等,請選擇該選項。如果選擇該選項,
比較還將重音不同的字母視為不等。
區分假名:如果想讓比較將片假名和平假名日語音節視為不等,請選擇該選項。
區分寬度:如果想讓比較將半形字元和全形字元視為不等,請選擇該選項。