亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何修改數據庫的服務器排序規則

如何修改數據庫的服務器排序規則

一只名叫tom的貓 2019-03-16 16:11:18
如何修改數據庫的服務器排序規則
查看完整描述

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))


 


查看完整回答
反對 回復 2019-03-20
  • 2 回答
  • 0 關注
  • 539 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號