collation(如何修改SQL Server 中数据库的Collation)
本文目录
如何修改SQL Server 中数据库的Collation
首先你要确保你有以下权限:
需要对 master 数据库的 CREATE DATABASE 权限,或需要 CREATE ANY DATABASE/ALTER ANY DATABASE 权限。
需要对数据库拥有 ALTER 权限。
然后你可以使用SSMS或者T-SQL去修改collation。
参考链接:https://msdn.microsoft.com/zh-cn/library/ms175835.aspx
sql中collate是什么意思
collate是一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则投影。语法COLLATE《collation_name》《collation_name》::={Windows_collation_name}|{SQL_collation_name}参数collation_name是应用于表达式、列定义或数据库定义的排序规则的名称。collation_name可以只是指定的Windows_collation_name或SQL_collation_name。Windows_collation_name是Windows排序规则的排序规则名称。请参见Windows排序规则名称。SQL_collation_name是SQL排序规则的排序规则名称。请参见SQL排序规则名称。COLLATE子句只能应用于char、varchar、text、nchar、nvarchar和ntext数据类型。
sql中的collation干什么用
排序规则(collation) 关于SQL Server的排序规则,估计大家都不陌生,在创建数据库时我们经常要选择一种排序规则(conllation),一般我们会留意到每一种语言的排序规则都有许多种,比如标准大陆简体中文Chinese_PRC的排序规则就有数十种之多这些排序规则有什么作用呢?让我们先来看看MS官方的解释:排序规则指定了表示每个字符的位模式。它还指定了用于排序和比较字符的规则。排序规则具有下面的特征:语言区分大小写区分重音区分假名比如在SQL Server 2005中,排序规则名称由两部份构成,比如 Chinese_PRC_CI_AI_WS 前半部份是指本排序规则所支持的字符集,如Chinese_PRC 指针对大陆简体字UNICODE的排序规则。 后半部份即后缀的含义如下: _BIN 指定使用向后兼容的二进制排序顺序。 _BIN2 指定使用 SQL Server 2005 中引入的码位比较语义的二进制排序顺序。 _Stroke 按笔划排序 _CI(CS) 是否区分大小写,CI不区分,CS区分 _AI(AS) 是否区分重音,AI不区分,AS区分 _KI(KS) 是否区分假名类型,KI不区分,KS区分 _WI(WS) 是否区分全半角,WI不区分,WS区分 既然排序规则如此复杂,那么应用了不同排序规则的列之间默认情况下便不能进行Union、Join、Like等equal操作了,于是便有了排序规则(collation)冲突。 排序规则(collation)冲突 我们知道,SQL Server 从2000 开始,便支持多个排序规则。SQL Server 2000 的数据库可使用除默认排序规则以外的其他排序规则。此外,SQL Server 2000 还支持为列专门制定排序规则。这样一来,我们在写跨表、跨数据库、跨服务器操作的T-SQL时,如果equal的字段排序规则不同,便会发生排序规则冲突。比如我们先见两个结构相同的表,但字段的排序规则不同: -- 1. Create TableA. CREATE TABLE TagsTableA ( TagName NVARCHAR(64) COLLATE Chinese_PRC_BIN ) -- 2. Create TableB. CREATE TABLE TagsTableB ( TagName NVARCHAR(64) COLLATE Chinese_PRC_CI_AS ) 当表建好之后执行: -- 3. Try to join them SELECT * from TagsTableA A INNER JOIN TagsTableB B on A.TagName = B.TagName 便会出下类似下面的问题:无法解决 equal to 操作中 “Chinese_PRC_BIN“ 和 “Chinese_PRC_CI_AS“ 之间的排序规则冲突。常见的场景——临时表 我们知道,SQL Server的临时表是保存在Tempdb数据库中的。而使用临时表的数据库与临时表的排序规则(conllation)不一定相同。所以,当Tempdb的排序规则与当前使用临时表的数据库排序规则不同时,便会出现排序规则冲突。一般来说,我们在创建临时表时可能不会注意到排序规则,从而留下排序规则冲突的隐患。比如Openlab V4.0的Blog模块中的一个存储过程,便有着这种隐患:/****** 对?象ó: StoredProcedure = 1 -- 1 as Normal status. END -- 5. Clear and drop Temp Table. TRUNCATE TABLE #TagsTable DROP TABLE #TagsTable COMMIT TRANSACTION; RETURN 1 END TRY BEGIN CATCH IF XACT_STATE() 《》 0 BEGIN ROLLBACK TRANSACTION; RETURN -1 END END CATCHENDGO常见的解决方案 知道了什么是排序规则冲突,我们接下来分析冲突的解决方案,以数据库级别的排序规则为例,一般来说,解决方案有下面几种把SQL实例删了重建 ——大多数情况下等于没说-_-|||修改数据库的排序规则 ——参考阿牛兄的这篇文章在T-SQL中使用COLLATE DATABASE_DEFAULT来解决冲突 ——接下来主要讨论这个COLLATE DATABASE_DEFAULT Collate XXX 操作可以用在字段定义或使用时,它会将字段定义或转换成XXX 的排序规则格式。而Collate Database_Default 则会将字段定义或转换成当前数据库的默认排序规则,从而解决冲突。比如在下面的代码中便使用了Collate Database_Default 来解决字段在equal操作中的排序规则冲突: Insert into Security.Report (Name) Select C.Path From SSRS.Catalog C Where C.Path Collate Database_Default Like @ReportPath + ’/%’ And C.Path Collate Database_Default Not In (Select Name From Security.Report R)当然,在创建临时表时若对字段定义加上Collate Database_Default ,也可以方便地解决潜在的排序规则冲突,比如上一节中提到的存储过程,只要做如下修改即可。 -- 1. Create Temp Table. CREATE TABLE #TagsTable ( TagName NVARCHAR(64) COLLATE DATABASE_DEFAULT ) 结束语对于专业的SQLer来说,排序规则的应用场景还有很多,例如利用排序规则特点计算汉字笔划和取得拼音首字母等等,更多信息,请查阅MSDN文档:http://msdn.microsoft.com/zh-cn/library/aa258237(en-us,SQL.80).aspx
如何查看MySQL数据库字符集和Collation信息
补充。。。。select * from information_schema.character_sets;select * from information_schema.collations;select * from information_schema.collation_character_set_applicability;
更多文章:

成员函数和构造函数的区别(请问构造函数和函数成员之间有什么区别)
2025年3月5日 02:50

内存管理有哪几种方式(为什么现在手机 256G 越来越不够用了有哪些内存管理的技巧)
2025年3月3日 00:50

xposed官网下载(Vivo+V2049A+安装xposed框架)
2025年3月17日 05:40

xlsx文件怎么打开软件(【xlsx文件怎么打开】xlsx文件打不开N种方法教你打开xlsx文件!)
2025年2月20日 09:40

lockdown用法(shutdown和lockdown的区别)
2025年3月31日 23:00

erp系统可以自学吗(ERP系统如何快速入门需要培训哪些知识)
2025年3月10日 00:00

boxster什么意思(跑车后箱上的turbo、coupe、gt、boxster等字样分别是什么意思)
2025年3月9日 18:20

folders(jenkins 的 folders plugin 是做什么用的)
2025年3月13日 14:20

flash鼠标跟随(Flash里的鼠标跟随效果是怎么做出来的)
2025年2月9日 11:10