sql排序规则

如果要是区分大小写的话,就要改变数据库的排序规则。

1、查看系统中所支持的全部排序规则列表

SELECT * FROM ::fn_helpcollations()

2、查看当前系统的排序规则.

SELECT SERVERPROPERTY('Collation')

3、改变数据库的排序规则(做ALTER之前,要中断所有用户对此数据库的访问)

语法:
use master
go
ALTER DATABASE 数据库名 COLLATE 排序规则名
例子:
use master
go
ALTER DATABASE luwanzhufa COLLATE Chinese_PRC_CS_AS

* 我查过。Chinese_PRC_CS_AS这个是简体中文。而且区分大小写的排序规则。

192 Japanese_BIN 二进制顺序、用于 932(日文)字符集。 
193 Japanese_CI_AS 字典顺序、不区分大小写、用于 932(日文)字符集。 
200 Japanese_CS_AS 字典顺序、区分大小写、用于 932(日文)字符集。
198 Chinese_PRC_BIN 二进制顺序、用于 936(简体中文)字符集。
199 Chinese_PRC_CI_AS 字典顺序、不区分大小写、用于 936(简体中文)字符集。
203 Chinese_PRC_CS_AS 字典顺序、区分大小写、用于 936(简体中文)字符集。

如: 
ALTER DATABASE database 
COLLATE Chinese_prc_ci_as 



--------------- 
Windows 排序规则名称 
使用下表使排序规则设置与另一个 Windows 区域设置保持一致。 

在"控制面板"的"区域设置"应用程序(Microsoft® Windows NT® 4.0、Microsoft Windows 98® 和 Microsoft Windows 95)或"区域选项"应用程序 (Microsoft Windows 2000) 中找到 Windows 区域设置名称,然后使用此表找到相应的排序规则指示器和代码页。 


Windows 区域设置 LCID(区域设置 ID) 
排序规则指示器 代码页 
南非荷兰语 0xx436 Latin1_General 1252 
阿尔巴尼亚语 0x41C Albanian 1250 
阿拉伯语(沙特阿拉伯) 0x401 Arabic 1256 
阿拉伯语(伊拉克) 0x801 Arabic 1256 
阿拉伯语(埃及) 0xC01 Arabic 1256 
阿拉伯语(利比亚) 0x1001 Arabic 1256 
阿拉伯语(阿尔及利亚) 0x1401 Arabic 1256 
阿拉伯语(摩洛哥) 0x1801 Arabic 1256 
阿拉伯语(突尼斯) 0x1C01 Arabic 1256 
阿拉伯语(阿曼) 0x2001 Arabic 1256 
阿拉伯语(也门) 0x2401 Arabic 1256 
阿拉伯语(叙利亚) 0x2801 Arabic 1256 
阿拉伯语(约旦) 0x2C01 Arabic 1256 
阿拉伯语(黎巴嫩) 0x3001 Arabic 1256 
阿拉伯语(科威特) 0x3401 Arabic 1256 
阿拉伯语(阿拉伯联合酋长国) 0x3801 Arabic 1256 
阿拉伯语(巴林群岛) 0x3C01 Arabic 1256 
阿拉伯语(卡塔尔) 0x4001 Arabic 1256 
巴斯克语 0x42D Latin1_General 1252 
白俄罗斯语 0x423 Cyrillic_General 1251 
保加利亚语 0x402 Cyrillic_General 1251 
加泰罗尼亚语 0x403 Latin1_General 1252 
繁体中文(台湾) 0x30404 Chinese_Taiwan_Bopomofo 950 
繁体中文(台湾) 0x404 Chinese_Taiwan_Stroke 950 
简体中文(中华人民共和国) 0x804 Chinese_PRC 936 
简体中文(中华人民共和国) 0x20804 Chinese_PRC_Stroke 936 
中文(新加坡) 0x1004 Chinese_PRC 936 
克罗地亚语 0x41a Croatian 1250 
捷克语 0x405 Czech 1250 
丹麦语 0x406 Danish_Norwegian 1252 
荷兰语(标准) 0x413 Latin1_General 1252 
荷兰语(比利时) 0x813 Latin1_General 1252 
英语(美国) 0x409 Latin1_General 1252 
英语(英国) 0x809 Latin1_General 1252 
英语(加拿大) 0x1009 Latin1_General 1252 
英语(新西兰) 0x1409 Latin1_General 1252 
英语(澳大利亚) 0xC09 Latin1_General 1252 
英语(爱尔兰) 0x1809 Latin1_General 1252 
英语(南非) 0x1C09 Latin1_General 1252 
英语(加勒比) 0x2409 Latin1_General 1252 
英语(牙买加) 0x2009 Latin1_General 1252 
爱沙尼亚语 0x425 Estonian 1257 
法罗语 0x0438 Latin1_General 1252 
现代波斯语 0x429 Arabic 1256 
芬兰语 0x40B Finnish_Swedish 1252 
法语(标准) 0x40C French 1252 
法语(比利时) 0x80C French 1252 
法语(瑞士) 0x100C French 1252 
法语(加拿大) 0xC0C French 1252 
法语(卢森堡) 0x140C French 1252 
乔治亚语(现代) 0x10437 Georgian_Modern_Sort 1252 
德语(电话簿排序) 0x10407 German_PhoneBook 1252 
德语(标准) 0x407 Latin1_General 1252 
德语(瑞士) 0x807 Latin1_General 1252 
德语(澳大利亚) 0xC07 Latin1_General 1252 
德语(卢森堡) 0x1007 Latin1_General 1252 
德语(列支敦士登) 0x1407 Latin1_General 1252 
希腊语 0x408 Greek 1253 
希伯来语 0x40D Hebrew 1255 
印地语 0x439 Hindi 仅 Unicode 
匈牙利语 0x40E Hungarian 1250 
匈牙利语 0x104E Hungarian_Technical 1250 
冰岛语 0x40F Icelandic 1252 
印度尼西亚语 0x421 Latin1_General 1252 
意大利 0x410 Latin1_General 1252 
意大利语(瑞士) 0x810 Latin1_General 1252 
日语 0x411 Japanese 932 
日语 (Unicode) 0x10411 Japanese_Unicode 932 
朝鲜语 (Extended Wansung) 0x412 Korean_Wansung 949 
朝鲜语 0x412 Korean_Wansung_Unicode 949 
拉脱维亚语 0x426 Latvian 1257 
立陶宛语 0x427 Lithuanian 1257 
立陶宛语 0x827 Lithuanian_Classic 1257 
马其顿语 0x41C Cyrillic_General 1251 
挪威语(博克马尔语) 0x414 Danish_Norwegian 1252 
挪威语(尼诺斯克) 0x814 Danish_Norwegian 1252 
波兰语 0x415 Polish 1250 
葡萄牙语(标准) 0x816 Latin1_General 1252 
葡萄牙语(巴西) 0x416 Latin1_General 1252 
罗马尼亚语 0x418 Romanian 1250 
俄语 0x419 Cyrillic_General 1251 
塞尔维亚语(拉丁) 0x81A Cyrillic_General 1251 
塞尔维亚语(西里尔) 0xC1A Cyrillic_General 1251 
斯洛伐克语 0x41B Slovak 1250 
斯洛文尼亚语 0x424 Slovenian 1250 
西班牙语(墨西哥) 0x80A Traditional_Spanish 1252 
西班牙语(传统) 0x40A Traditional_Spanish 1252 
西班牙语(现代) 0xC0A Modern_Spanish 1252 
西班牙语(危地马拉) 0x100A Modern_Spanish 1252 
西班牙语(哥斯达黎加) 0x140A Modern_Spanish 1252 
西班牙语(巴拿马) 0x180A Modern_Spanish 1252 
西班牙语(多米尼加共和国) 0x1C0A Modern_Spanish 1252 
西班牙语(委内瑞拉) 0x200A Modern_Spanish 1252 
西班牙语(哥伦比亚) 0x240A Modern_Spanish 1252 
西班牙语(秘鲁) 0x280A Modern_Spanish 1252 
西班牙语(阿根廷) 0x2C0A Modern_Spanish 1252 
西班牙语(厄瓜多尔) 0x300A Modern_Spanish 1252 
西班牙语(智利) 0x340A Modern_Spanish 1252 
西班牙语(乌拉圭) 0x380A Modern_Spanish 1252 
西班牙语(巴拉圭) 0x3C0A Modern_Spanish 1252 
西班牙语(玻利维亚) 0x400A Modern_Spanish 1252 
瑞典语 0x41D Finnish_Swedish 1252 
泰语 0x41E Thai 874 
土耳其语 0x41F Turkish 1254 
乌克兰语 0x422 Ukrainian 1251 
乌尔都语 0x420 Arabic 1256 
越南语 0x42A Vietnamese 1258 
---------------------------------------- 
Windows 排序规则排序样式 
在"排序规则设置"屏幕上,可以选择"二进制"排序次序,也可以定义用于选定的排序规则指示器(Windows 排序规则名称)的排序样式。 



说明 对于 Windows 排序规则,nchar、nvarchar 和 ntext 数据类型具有与 char、varchar 和 text 数据类型相同的排序行为。有关更多信息,请参见 SQL Server 排序规则基础知识。 


排序次序 描述 
二进制 根据为每个字符所定义的位模式对 Microsoft® SQL Server™ 表中的数据进行排序和比较。二进制排序次序区分大小写,先小写字母后大写字母并且区分重音。这是最快的排序次序。 
如果不选中此选项,SQL Server 将按照字典中定义的相关语言或字母表的排序及比较规则进行排序。 

区分大小写 指定 SQL Server 区分大小写字母。 
如果不选中此规则选项,SQL Server 会认为大小写字母等价。如果不选中"区分大小写"选项,SQL Server 就不定义大小写字母之间的高低排序关系。 

区分重音 指定 SQL Server 区分重音和非重音字符。例如,"a"不等同于"á"。 
如果不选中此选项,SQL Server 会认为重音与相应的非重音字母等价。 

区分假名 指定 SQL Server 区分两种类型的日文假名字符:平假名和片假名。 
如果没有选择,SQL Server 会认为平假名和片假名等价。 

区分宽度 指定 SQL Server 区分相同字符的单字节表示法(半角)和双字节表示法(全角)。 
如果没有选择,则 SQL Server 将认为相同字符的单字节表示法和双字节表示法等效。 

 

 

  • SQLSERVER 中的排序规则 服务器》数据库》表列--------------------------------- 排序规则简介 --------------------------------- 什么叫排序规则呢? 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 区分 ---- 区分大小写 :如果想让比较将大写字母和小写字母视为不等,请选择该选项。-- 区分重音: 如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,-- 比较还将重音不同的字母视为不等。-- 区分假名: 如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。-- 区分宽度: 如果想让比较将半角字符和全角字符视为不等,请选择该选项-------------------------------------------------------------------------------------sp_helpsortSELECT 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 [pratice] COLLATE Chinese_PRC_CI_AS--2. 为数据库指定排序规则
CREATE DATABASE db COLLATE Chinese_PRC_CI_ASGOALTER DATABASE db COLLATE Chinese_PRC_BINGOALTER    DATABASE [pratice]  COLLATE   Chinese_PRC_CS_AS  -- 区分大小写ALTER    DATABASE    [pratice] COLLATE  Chinese_PRC_CI_AS -- 不区分大小写--------------------------- 表中的列 ---------------------------------------- 为表中的列指定排序规则CREATE TABLE tb    (      col1 VARCHAR (10 ) ,      col2 VARCHAR (10 ) COLLATE Chinese_PRC_CI_AS    )GOALTER TABLE tb ADD col3 VARCHAR (10 ) COLLATE Chinese_PRC_BINGOALTER TABLE tb ALTER COLUMN col2 VARCHAR ( 10) COLLATE Latin1_General_CS_AS_KS_WSGOALTER    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  -- 区分大小写-----------------------------------------------------------------------3. 为字符变量和参数应用排序规则DECLARE @a VARCHAR ( 10) ,    @b VARCHAR (10 )SELECT   @a = 'a' ,        @b = 'A'-- 使用排序规则 Chinese_PRC_CI_ASSELECT   CASE WHEN @a COLLATE Chinese_PRC_CI_AS = @b THEN '@a=@b' --Chinese_PRC_CI_AS 不区分大小写             ELSE '@a<>@b'        END-- 结果:@a=@b-- 使用排序规则 Chinese_PRC_BINSELECT   CASE WHEN @a COLLATE Chinese_PRC_BIN = @b THEN '@a=@b'   --区分大小写             ELSE '@a<>@b'        END-- 结果:@a<>@b---------------------------SQL2000 适用 -------------------------------------------------------
  • 方法一安装 SQL2000时选择区分大小写或安装完以后重建 mastar ,选择区分大小--C:\Program   Files\Microsoft   SQL   Server\80\Tools\Binn\rebuildm.exe-- 方法二sql   server   8.0 以上的版本才可以,及其以下不支持ALTER    DATABASE   [pratice]   COLLATE   Chinese_PRC_CS_AS-- 修改排序规则,改成大小写敏感的排序规则-- 如果只修改一个表,用 alter   table语句-- 如果修改一个库的默认排序规则,用 alter   datebase 语句-- 如果修改整个服务器的默认排序规则,用 Rebuildm.exe 重建master 库-- 指定排序规则就可以了--------------------------------------------------------------------- 注意需要使用 NVARCHAR()数据类型 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-- 因为排序规则而出错的例子--USE [tempdb]--GO--DROP TABLE #t1--DROP TABLE #t2CREATE TABLE #t1    (      value INT ,      name NVARCHAR ( 20) COLLATE Albanian_CI_AI_WS    )CREATE TABLE #t2    (      value INT ,      name NVARCHAR ( 20) COLLATE Chinese_PRC_CI_AI_WS    )INSERT   #t1        SELECT   1 ,                ' 中'        UNION ALL        SELECT   2 ,                ' 国'        UNION ALL        SELECT   3 ,                ' 人'        UNION ALL        SELECT   4 ,                ' 阿'INSERT   #t2        SELECT   1 ,                ' 亲'        UNION ALL        SELECT   2 ,                ' 国'        UNION ALL        SELECT   3 ,                ' 好'        UNION ALL        SELECT   4 ,                ' 阿'SELECT   * FROM    #t1 A INNER JOIN #t2 B ON A . name = B .name-- 解决方法SELECT   * FROM    #t1 A INNER JOIN #t2 B ON A . name = B .name COLLATE Chinese_PRC_CI_AI_WS----------------------------------------------------------------------------------------- 例: 让表 NAME列的内容按拼音排序:CREATE TABLE #t1    (      value INT ,      name NVARCHAR ( 20) COLLATE Albanian_CI_AI_WS    )    INSERT   #t1        SELECT   1 ,                ' 中'        UNION ALL        SELECT   2 ,                ' 国'        UNION ALL        SELECT   3 ,                ' 人'        UNION ALL        SELECT   4 ,                ' 阿'SELECT   * FROM    #t1 ORDER BY name COLLATE Chinese_PRC_CS_AS_KS_WS/* 结果:id name----------- --------------------4 阿2 国3 人1 中*/--------------------------------------------------------------------------- 例:让表NAME 列的内容按姓氏笔划排序:create table #t (id int ,name NVARCHAR( 20 ))insert #t select 1 ,' 三 'union all select 2 ,' 乙 'union all select 3 ,' 二 'union all select 4 ,' 一 'union all select 5 ,' 十 'select * from #t order by name collate Chinese_PRC_Stroke_CS_AS_KS_WSdrop table #t/* 结果:id name----------- --------------------4 一2 乙3 二5 十1 三*/--------------------------- 计算汉字的笔划 ----------------------------------------------   上面所有准备过程,只是为了写下面这个函数,这个函数撇开上面建的所有临时表和固-- 定表,为了通用和代码转移方便,把表 tab_hzbh 的内容写在语句内,然后计算用户输入一串-- 汉字的总笔划:USE [tempdb]GOcreate function fun_getbh (@str nvarchar (4000 ))returns intasbegindeclare @word nchar ( 1), @n intset @n= 0while len ( @str)> 0beginset @word=left( @str ,1 )-- 如果非汉字,笔划当计set @n= @n +(case when unicode (@word ) between 19968 and 19968 + 20901then ( select top 1 id from (select 1 as id ,N ' 亅' as wordunion all select 2 ,N ' 阝'union all select 3 ,N ' 马'union all select 4 ,N ' 风'union all select 5 ,N ' 龙'union all select 6 ,N ' 齐'union all select 7 ,N ' 龟'union all select 8 ,N ' 齿'union all select 9 ,N ' 鸩'union all select 10 ,N ' 龀'union all select 11 ,N ' 龛'union all select 12 ,N ' 龂'union all select 13 ,N ' 龆'union all select 14 ,N ' 龈'union all select 15 ,N ' 龊'union all select 16 ,N ' 龍'union all select 17 ,N ' 龠'union all select 18 ,N ' 龎'union all select 19 ,N ' 龐'union all select 20 ,N ' 龑'union all select 21 ,N ' 龡'union all select 22 ,N ' 龢'union all select 23 ,N ' 龝'union all select 24 ,N ' 齹'union all select 25 ,N ' 龣'union all select 26 ,N ' 龥'union all select 27 ,N ' 齈'union all select 28 ,N ' 龞'union all select 29 ,N ' 麷'union all select 30 ,N ' 鸞'union all select 31 ,N ' 麣'union all select 32 ,N ' 龖'union all select 33 ,N ' 龗'union all select 35 ,N ' 齾'union all select 36 ,N ' 齉'union all select 39 ,N ' 靐'union all select 64 ,N ' 龘') Twhere word>= @word collate Chinese_PRC_Stroke_CS_AS_KS_WSorder by id ASC) else 0 end )set @str=right( @str ,len ( @str)- 1 )endreturn @nENDselect dbo. fun_getbh (' 中华 '), dbo .fun_getbh ( '中華人民共和國 ' )-- 简繁体都行--------------------------------------------------------------------------- 用排序规则的特性得到汉字拼音首字母-- 用得到笔划总数相同的方法,我们也可以写出求汉字拼音首字母的函数。如下:USE [tempdb]GOcreate function fun_getPY (@str nvarchar (4000 ))returns nvarchar ( 4000)asbegindeclare @word nchar ( 1), @PY nvarchar( 4000 )set @PY= ''while len ( @str)> 0beginset @word=left( @str ,1 )-- 如果非汉字字符,返回原字符set @PY= @PY +(case when unicode (@word ) between 19968 and 19968 + 20901then ( select top 1 PY from (select 'A' as PY , N' 驁 ' as wordunion all select 'B', N '簿 'union all select 'C', N '錯 'union all select 'D', N '鵽 'union all select 'E', N '樲 'union all select 'F', N '鰒 'union all select 'G', N '腂 'union all select 'H', N '夻 'union all select 'J', N '攈 'union all select 'K', N '穒 'union all select 'L', N '鱳 'union all select 'M', N '旀 'union all select 'N', N '桛 'union all select 'O', N '漚 'union all select 'P', N '曝 'union all select 'Q', N '囕 'union all select 'R', N '鶸 'union all select 'S', N '蜶 'union all select 'T', N '籜 'union all select 'W', N '鶩 'union all select 'X', N '鑂 'union all select 'Y', N '韻 'union all select 'Z', N '咗 ') Twhere word>= @word collate Chinese_PRC_CS_AS_KS_WSorder by PY ASC) else @word end )set @str=right( @str ,len ( @str)- 1 )endreturn @PYendselect dbo. fun_getPY (' 中华 '), dbo .fun_getPY ( '中華人民共和國 ' )-- 结果都为: ZHRMGHG--------------------------------------------------------------------------- 先用SQLSERVER 方法得到所有汉字,不用字典,我们简单利用 SQL 语句就可以得到:select top 20902 code =identity ( int, 19968 ,1 ) into #t from syscolumns a, syscolumns bselect code, nchar (code ) as CNWord from #t-- 然后,我们用 Select语句,让它按笔划排序。select code, nchar (code ) as CNWordfrom #torder by nchar( code ) collate Chinese_PRC_Stroke_CS_AS_KS_WS, code 


桦仔

 

所有回覆


字符集是字符的编码,而排序规则则是将字符以何种语言来进行排序,比如以中文排序,以拉丁文来排序,还可以区分大小写排序等等

  • 字符集(Charset):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

    字符编码(Character Encoding):是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),
    与其他东西的一个集合(如号码或电脉冲)进行配对
    。即在符号集合与数字系统之间建立对应关系,它是信息处理的一项基本技术。
    通常人们用符号集合(一般情况下就是文字)来表达信息。
    而以计算机为基础的信息处理系统则是利用元件(硬件)不同状态的组合来存储和处理信息的。
    元件不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码

参考一下百度百科:http://baike.baidu.com/view/1204863.htm

SQLSERVER支持的字符集是cp936

sql server 字符串数组查询 sql server查看字符集_General

cp936即 code page 936(代码页936)是以GBK(国标扩展字符集)为基础的编码。

GB2312(国标字符集)只是GBK的一部分。
GB2312只支持常用的汉字,而且是简体字。GBK支持繁体字和生僻字。

所以说字符集跟排序规则基本上没有关系

-----------------------------------------------------------------------------------------------------

查看当前数据库实例的排序规则:SELECT SERVERPROPERTY ('Collation' )

查看当前数据库的排序规则,在数据库属性里查看,如果没有修改数据库的排序规则,默认继承数据库实例的排序规则

sql server 字符串数组查询 sql server查看字符集_General_02

 

 

 

 

 

 

C:\temp\SQLServer2005SP3-KB955706-x86-CHS.exe /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=administrators /SAPWD=tagit /SQLCOLLATION=Japanese_CI_AS

 

今天同事的新安装的SQL Server 2008 R2 写入中文乱码,发现是排序代码的问题

    --通过修改字符集,可以写入中文,但是varchar类型的还是乱码, 修改数据库字符集

    alter database DBName collate Chinese_PRC_CI_AS

 最后只能使用重建Master库来执行: 


C:\SQLServer2008R2\SQL2008R2>setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=Administrators /SAPWD=11 /SQLCOLLAT
ION=Chinese_PRC_CI_AS

  这里:

      1,“C:\SQLServer2008R2\SQL2008R2”是指:SQL Server的安装源文件目录

      2,setup是指安装命令Setup.exe

      3, SAPWD是重新创建Master库后sa的密码,Windows 2008 有密码策略,要使用强密码字符

    

       执行完毕后,Master重建,用户,数据库会会消失,原来的库需要手工附加一下。

 

 

转载自 

需求

      安装数据库时,将字符集安装成了“SQL_Latin1_General_CP1_CI_AS”,现在需要将其更改为“Chinese_PRC_CI_AS”。

 

 

sql server 字符串数组查询 sql server查看字符集_排序规则_03


方法

           重新生成系统数据库 ,然后还原配置信息。

 

局限

重新生成 master、model、msdb 和 tempdb 系统数据库时,将删除这些数据库,然后在其原位置重新创建。 如果在重新生成语句中指定了新排序规则,则将使用该排序规则设置创建系统数据库。 用户对这些数据库所做的所有修改都会丢失。 例如,您在 master 数据库中的用户定义对象、在 msdb 中的预定作业或在 model 数据库中对默认数据库设置的更改都会丢失。

 

前期准备

在重新生成系统数据库之前执行下列任务,以确保可以将系统数据库还原至它们的当前设置。

  1. 记录所有服务器范围的配置值。
    SELECT * FROM sys.configurations;
  2. 记录所有应用到 SQL Server 实例和当前排序规则的 Service Pack 和修补程序。 重新生成系统数据库后必须重新应用这些更新。
1. SELECT
SERVERPROPERTY('ProductVersion ') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime,
SERVERPROPERTY('Collation') AS Collation;
  1. 记录系统数据库的所有数据文件和日志文件的当前位置。 重新生成系统数据库会将所有系统数据库安装到其原位置。 如果已将系统数据库数据文件或日志文件移动到其他位置,则必须再次移动这些文件。
    SELECT name, physical_name AS current_file_location
    FROM sys.master_files
    WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));
  2. 如果将 SQL Server 的实例配置为复制分发服务器,请找到该分发数据库的当前备份。
  3. 确保您有重新生成系统数据库的相应权限。 必须是 sysadmin 固定服务器角色的成员才能执行此操作。 有关详细信息,请参阅服务器级别角色。
  4. 将原数据库的帐号、JOB等与系统数据库相关的信息全部备份起来(可以先生成相应的脚本),分离掉所有用户库。

 

重新生成系统数据库

运行下面的命令就可重建数据库(根据您的系统,需要做相应的修改 ;D:/Setup 是数据库安装文件所在的路径)

D:/Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=Administrators /SAPWD=XXXX /SQLCOLLATION=Chinese_PRC_CI_AS

参数说明:

参数名称

说明

/QUIET 或 /Q

指定在没有任何用户界面的情况下运行安装程序。

/ACTION=REBUILDDATABASE

指定安装程序将重新创建系统数据库。

/INSTANCENAME=InstanceName

SQL Server 实例的名称。 对于默认实例,请输入 MSSQLSERVER。

/SQLSYSADMINACCOUNTS=accounts

指定要添加到 sysadmin 固定服务器角色中的 Windows 组或单个帐户。 指定多个帐户时,请用空格将帐户隔开。 例如,请输入 BUILTIN\Administrators MyDomain\MyUser。 当您在帐户名称内指定包含空格的帐户时,用双引号将该帐户引起来。 例如,输入 NT AUTHORITY\SYSTEM。

[ /SAPWD=StrongPassword ]

指定 SQL Server sa 帐户的密码。 如果实例使用混合身份验证(SQL Server 和 Windows 身份验证)模式,则此参数是必需的。


安全说明

sa 帐户是一个广为人知的 SQL Server 帐户,并且经常成为恶意用户的攻击目标。 因此,为 sa 登录名使用强密码非常重要。

不要为 Windows 身份验证模式指定此参数。

[ /SQLCOLLATION=CollationName ]

指定新服务器级排序规则。 此参数可选。 如果没有指定,则使用服务器的当前排序规则。


重要提示

更改服务器级排序规则不会更改现有用户数据库的排序规则。 默认情况下,所有新创建的用户数据库都将使用新排序规则。

有关详细信息,请参阅设置或更改服务器排序规则

 

安装程序完成后,将显示如下信息,(你也可以检查 Summary.txt 日志文件以验证重新生成过程是否成功完成。 此文件位于 C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Logs)。

sql server 字符串数组查询 sql server查看字符集_sql server 字符串数组查询_04

 

检查和修复

系统数据库恢复完成后,先检查一下字符集是否按要求恢复了:

sql server 字符串数组查询 sql server查看字符集_sql server 字符串数组查询_05

字符集更改完成后,我们还需要附加上用户数据库,将原来的帐号和JOB等信息以及配置信息做修复,还需要修复孤立帐号等。

 

附加说明

  如果您只需要更改某个用户数据库的字符集,非常简单:

  --修改数据库字符集

  alter database DBName collate Chinese_PRC_CI_AS

 

注意

    以上恢复是在SQLServer2008R2版本上面完成的,不同的版本您可能需要做一些修改,另外此方法存在一定的风险(主要是在重建数据库阶段),产品环境

最好还是重新安装数据库。