2 回答

TA貢獻1982條經驗 獲得超2個贊
您好,很高興為您解答。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | 1.sp_helpsort SELECT SERVERPROPERTY ('Collation') 查看你的排序規則. 不過你的這個應該和字符集有關.
2.更改服務器排序規則 更改 SQL Server 2005 實例的默認排序規則的操作可能會比較復雜,包括以下步驟:
確保具有重新創建用戶數據庫及這些數據庫中的所有對象所需的全部信息或腳本。 使用工具(例如大容量復制)導出所有數據。 刪除所有用戶數據庫。 重新生成在 setup 命令的 SQLCOLLATION 屬性中指定新的排序規則的 master 數據庫。例如: 復制代碼 start /wait setup.exe /qb INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=test SQLCOLLATION=SQL_Latin1_General_CP1_CI_AI 有關重新生成 master 數據庫的詳細信息,請參閱如何重新生成 SQL Server 2005 的 Master 數據庫。 創建所有數據庫及這些數據庫中的所有對象。 導入所有數據。 注意: 可以為創建的每個新數據庫指定默認排序規則,而不更改 SQL Server 2005 實例的默認排序規則。
3.設置和更改數據庫排序規則 創建新數據庫時,可以使用下列內容之一指定排序規則: CREATE DATABASE 語句的 COLLATE 子句。 SQL Server Management Studio. SQL 管理對象 (SMO) 中的 Database.Collation 屬性。 如果未指定排序規則,則使用服務器排序規則。 可以使用 ALTER DATABASE 語句的 COLLATE 子句來更改在用戶數據庫中創建的任何新對象的排序規則。使用此語句不能更改任何現有用戶定義的表中列的排序規則。使用 ALTER TABLE 的 COLLATE 子句可以更改這些列的排序規則。 更改數據庫排序規則時,需要更改下列內容: 數據庫的默認排序規則,這一新的默認排序規則將應用于數據庫中后續創建的所有列、用戶定義的數據類型、變量和參數。根據數據庫中定義的對象解析 SQL 語句中指定的對象標識符時,也使用新的默認排序規則。 將系統表中的任何 char、varchar、text、nchar、nvarchar 或 ntext 列更改為使用新的排序規則。 將存儲過程和用戶定義函數的所有現有 char、varchar、text、nchar、nvarchar 或 ntext 參數和標量返回值更改為使用新的排序規則。 將 char、varchar、text、nchar、nvarchar 或 ntext 系統數據類型和基于這些系統數據類型的所有用戶定義的數據類型更改為使用新的默認排序規則。
SQL code :
1.將數據庫的字符集修改為: alter database dbname collate Chinese_PRC_CI_AS
2.
--1. 為數據庫指定排序規則 CREATE DATABASE db COLLATE Chinese_PRC_CI_AS GO
ALTER DATABASE db COLLATE Chinese_PRC_BIN GO
/*====================================*/
--2. 為表中的列指定排序規則 CREATE TABLE tb( col1 varchar(10), col2 varchar(10) COLLATE Chinese_PRC_CI_AS) GO
ALTER TABLE tb ADD col3 varchar(10) COLLATE Chinese_PRC_BIN GO
ALTER TABLE tb ALTER COLUMN col2 varchar(10) COLLATE Chinese_PRC_BIN GO
/*====================================*/
--3. 為字符變量和參數應用排序規則 DECLARE @a varchar(10),@b varchar(10) SELECT @a='a',@b='A'
--使用排序規則 Chinese_PRC_CI_AS SELECT CASE WHEN @a COLLATE Chinese_PRC_CI_AS = @b THEN '@a=@b' ELSE '@a<>@b' END --結果:@a=@b
--使用排序規則 Chinese_PRC_BIN SELECT CASE WHEN @a COLLATE Chinese_PRC_BIN = @b THEN '@a=@b' ELSE '@a<>@b' END --結果:@a<>@b
3. 表 ALTER TABLE tb ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CI_AS --不區分大小寫 ALTER TABLE tb ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CS_AS --區分大小寫 數據庫 ALTER DATABASE database COLLATE Chinese_PRC_CS_AS --區分大小寫
ALTER DATABASE database COLLATE Chinese_PRC_CI_AS --不區分大小寫
方法一.安裝SQL時選擇區分大小寫 或安裝完以后重建mastar,選擇區分大小 C:\Program Files\Microsoft SQL Server\80\Tools\Binn\rebuildm.exe
方法二.sql server 8.0以上的版本才可以,7.0及其以下不支持 alter database 數據庫 COLLATE Chinese_PRC_CS_AS 修改排序規則,改成大小寫敏感的排序規則 如果只修改一個表,用alter table語句 如果修改一個庫的默認排序規則,用alter datebase語句 如果修改整個服務器的默認排序規則,用Rebuildm.exe重建master庫 --指定排序規則就可以了
--示例 select replace('AbacB' collate Chinese_PRC_CS_AS_WS,'B','test')
--如果你是要求表支持,則可以建表時指定排序規則,這樣replace就不用寫排序規則了
--示例 create table tb(a varchar(20) collate Chinese_PRC_CS_AS_WS) insert tb values('Abac')
select replace(a,'a','test') from tb
drop table tb
指定排序規則即可
Windows 排序規則名稱 在 COLLATE 子句中指定 Windows 排序規則名稱。Windows 排序規則名稱由排序規則指示器和比較風格構成。
語法 < Windows_collation_name > :: =
CollationDesignator_ <ComparisonStyle>
< ComparisonStyle > ::= CaseSensitivity_AccentSensitivity [_KanatypeSensitive [_WidthSensitive ] ] | _BIN
參數 CollationDesignator
指定 Windows 排序規則使用的基本排序規則?;九判蛞巹t包括:
當指定按字典排序時應用其排序規則的字母表或語言
用于存儲非 Unicode 字符數據的代碼頁。 例如 Latin1_General 或法文,兩者都使用代碼頁 1252,或土耳其文,它使用代碼頁 1254。
CaseSensitivity
CI 指定不區分大小寫,CS 指定區分大小寫。
AccentSensitivity
AI 指定不區分重音,AS 指定區分重音。
KanatypeSensitive
Omitted 指定不區分大小寫,KS 指定區分假名類型。
WidthSensitivity
Omitted 指定不區分大小寫,WS 指定區分大小寫。
BIN
指定使用二進制排序次序。
如果你只是目前查詢區分,那么還是不要這樣改,免得又反悔,如此查詢: select * from a /* a_nam a_add ---------- ---------- 1 aa 1 bb 2 cc 2 vv 2 kk 3 dd 3 ee 4 dd 5 ee 6 yy 6 yy
(11 row(s) affected) */ 現在我們查詢a_add = 'aa'的,'Aa'等等不行! Example 1:
select * from a where a_add collate Chinese_PRC_CS_AS_WS = 'aa' /* a_nam a_add ---------- ---------- 1 aa
(1 row(s) affected) */
Example 2:
select * from a where a_add collate Chinese_PRC_CS_AS_WS = 'Aa' /* a_nam a_add ---------- ----------
(0 row(s) affected) */
方法三.上面的記不住,那么就用最笨的方法,轉化為ascii select * from a where ascii(substring(a_add,1,1)) = ascii(substring('Aa',1,1)) and ascii(substring(a_add,2,1)) = ascii(substring('Aa',2,1)) /* a_nam a_add ---------- ----------
(0 row(s) affected) */
方法三:任何版本都可以 select * from a where cast(a_add as varbinary(10))= cast('aa' as varbinary(10)) |
添加回答
舉報