Questions tagged «collation»

排序规则是一组规则,这些规则确定如何对数据进行排序和比较以比较字符集中的字符。


4
如何更改SQL Server排序规则
如何更改整个服务器和特定数据库的SQL Server 2008 R2 Express默认排序规则? 有没有办法使用SQL Server Management Studio的可视界面来做到这一点?在“服务器属性”窗口(以及相应的“数据库属性”窗口中),此属性不可用于编辑。

1
为什么我的PostgreSQL ORDER BY不区分大小写?
我在Debian上运行了Postgres 9.4.4,并且得到以下ORDER BY行为: veure_test=# show LC_COLLATE; lc_collate ------------- en_US.UTF-8 (1 row) veure_test=# SELECT regexp_split_to_table('D d a A c b CD Capacitor', ' ') ORDER BY 1; regexp_split_to_table ----------------------- a A b c Capacitor CD d D (8 rows) 和uname -a: Linux ---- 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1 x86_64 GNU/Linux 但是,在使用Postgres …

3
我应该为哪种多语言网站选择哪种排序规则?
归类对查询速度有影响吗?表格的大小会根据排序规则进行更改吗? 如果我想建立一个必须支持所有可能语言的网站(以Google为例),那么推荐的整理方法是? 我将需要存储诸如之类的字符日本語,我在网站上的搜索将必须返回something以作为sóméthíng输入,并且它也必须不区分大小写。 我怎么知道哪个是最好的选择?哪种排序规则更适合这种情况?

2
LC_CTYPE对PostgreSQL数据库有什么影响?
因此,我几乎没有使用PostgreSQL的Debian服务器。从历史上看,这些服务器和PostgreSQL是使用Latin 9字符集进行本地化的,那时还不错。现在,我们必须处理波兰语,希腊语或中文这样的问题,因此对其进行更改已成为一个日益严重的问题。 当我尝试创建UTF8数据库时,收到消息: 错误:编码UTF8与语言环境fr_FR不匹配详细信息:所选的LC_CTYPE设置需要编码LATIN9。 很少有几次我和我的老朋友Google进行过相关的研究,而我发现的过程过于复杂,例如更新Debian LANG,使用正确的字符集重新编译PostgreSQL,编辑所有LC_系统变量和其他晦涩的解决方案。所以暂时,我们将这个问题搁置一旁。 最近,它又回来了,希腊人想要的东西,而拉丁9人不想。当我再次调查这个问题时,一位同事走近我说:“不,很简单,看。” 他没有编辑任何内容,没有做魔术,他只是执行以下SQL查询: CREATE DATABASE my_utf8_db WITH ENCODING='UTF8' OWNER=admin TEMPLATE=template0 LC_COLLATE='C' LC_CTYPE='C' CONNECTION LIMIT=-1 TABLESPACE=pg_default; 而且效果很好。 我实际上一无所知LC_CTYPE='C',我很惊讶没有在Google的第一个解决方案上甚至在Stack Overflow上都没有使用它。我环顾四周,只在PostgreSQL文档中找到一个提及。 当LC_CTYPE为C或POSIX时,允许使用任何字符集,但是对于LC_CTYPE的其他设置,只有一个字符集可以正常工作。由于initdb冻结了LC_CTYPE设置,因此在集群的不同数据库中使用不同编码的明显灵活性要比实际更具理论性,除非您选择C或POSIX语言环境(从而禁用任何实际语言环境感知)。 因此,让我感到奇怪的是,这太容易了,太完美了,缺点是什么?而且,我很难找到答案。所以我在这里发布: tl; dr:在特定的本地化环境中使用的缺点是什么LC_CTYPE='C'?这样做不好吗?我应该打破什么?

1
如何将SQL Server Unicode / NVARCHAR字符串设置为表情符号或补充字符?
我想根据其Unicode代码点将Unicode字符串变量设置为特定字符。 我想使用65535以上的代码点,但是SQL Server 2008 R2数据库的排序规则为SQL_Latin1_General_CP1_CI_AS。 根据Microsoft的NCHAR文档,该NCHAR函数采用一个整数,如下所示: integer_expression 当数据库的排序规则不包含补充字符(SC)标志时,这是一个从0到65535(0到0xFFFF)的正整数。如果指定的值超出此范围,则返回NULL。有关补充字符的更多信息,请参见排序规则和Unicode支持。 当数据库的排序规则支持补充字符(SC)标志时,这是一个从0到1114111(从0到0x10FFFF)的正整数。如果指定的值超出此范围,则返回NULL。 所以这段代码: SELECT NCHAR(128512); NULL在此数据库中返回。 我希望它返回与此相同的内容: SELECT N'😀'; 在排序规则“不包含补充字符(SC)标志”的数据库中,如何使用代码(不使用实际的表情符号字符)将Unicode字符串变量(例如nvarchar)设置为表情符号? 表情符号Unicode代码点的完整列表 (最终,我希望任何角色都能正常工作。为了方便参考,我只是选择了表情符号。) (尽管服务器是SQL Server 2008 R2,但我也对以后版本的任何解决方案感到好奇。) 假设没有办法,是否可以在另一个具有适当排序规则的数据库中引用内联用户定义函数? 如何找到带有“ supplementary character”标志的排序规则? 这不会在我们的服务器上返回任何记录: SELECT * FROM sys.fn_helpcollations() WHERE name LIKE 'SQL%[_]SC'; 似乎引入了SQL Server 2012 Latin1_General_100_CI_AS_SC可以正常工作。您可以在较旧的实例上安装排序规则吗? 整理参考: 在SQL Server中,char,nchar,varchar和nvarchar有什么区别? Microsoft的补充字符归类信息 Microsoft的SQL Server 2008 R2排序规则列表 是否有解释说明为什么SQL Server不管排序规则如何都可以理解和处理扩展字符(除了从角度来看之外)NCHAR?

3
如何为国际数据库选择排序规则?
我正在设计一个数据库,该数据库将以不同的语言存储数据(使用UTF-8),所以我认为显示查询结果的最佳方法是在查询过程中根据用户的语言对其进行排序(因为不止一种正确的方法),如下所示: SELECT a < b COLLATE "de_DE" FROM test1; 假设这是处理国际数据的正确方法,这是数据库本身的最佳整理方法?PostgreSQL文档说: C和POSIX归类均指定“传统C”行为,其中仅将ASCII字母“ A”至“ Z”视为字母,并且严格按字符代码字节值进行排序。 我认为这是这种情况下的最佳选择,还是我错了? (奖金问题:在查询本身中选择排序规则是否太慢?)。

4
sys.databases中某些列的排序如何处理?
我正在尝试UNPIVOT在sys.databases2005年至2012年的各个版本的SQL Server中包含的各个列上运行。 在UNPIVOT与以下错误消息失败: 消息8167,第16层,状态1,第48行 列“ CompatibilityLevel”的类型与UNPIVOT列表中指定的其他列的类型冲突。 T-SQL: DECLARE @dbname SYSNAME; SET @dbname = DB_NAME(); SELECT [Database] = unpvt.DatabaseName , [Configuration Item] = unpvt.OptionName , [Configuration Value] = unpvt.OptionValue FROM ( SELECT DatabaseName = name , RecoveryModel = CONVERT(VARCHAR(50), d.recovery_model_desc) , CompatibilityLevel = CONVERT(VARCHAR(50), CASE d.[compatibility_level] WHEN 70 THEN 'SQL Server …

2
口音敏感排序
为什么这两个SELECT语句导致排序顺序不同? USE tempdb; CREATE TABLE dbo.OddSort ( id INT IDENTITY(1,1) PRIMARY KEY , col1 NVARCHAR(2) , col2 NVARCHAR(2) ); GO INSERT dbo.OddSort (col1, col2) VALUES (N'e', N'eA') , (N'é', N'éB') , (N'ë', N'ëC') , (N'è', N'èD') , (N'ê', N'êE') , (N'ē', N'ēF'); GO SELECT * FROM dbo.OddSort ORDER BY col1 …

2
不区分大小写的排序规则如何工作?
SQL Server中的默认排序规则类型允许对不区分大小写的字符串建立索引,但数据的大小写仍然保留。这实际上如何工作?我正在寻找实际的基本要点,位和字节或详细解释它的好资源。 create table casetest (fruitnames nvarchar(50) not null); create unique index IX_fruitnames on casetest(fruitnames); insert into casetest values ('apples'); insert into casetest values ('Pears'); -- this insert fails insert into casetest values ('pears'); -- this yields 'Pears' as a result select * from casetest (forceseek) where fruitnames = 'PEARS' …



2
是否有任何DBMS具有区分大小写和不区分重音的排序规则?
请注意,此问题与供应商/版本无关 在我看来,作为说英语的专家(打字员,作家),可以合理地期望单词使用正确的大小写,但不一定具有沿正确方向的正确口音: 当我和Chloe在香榭丽舍大街的饭店maitre d'hotel的tete-a-tete中沉思时,一边等待加尔肯(garcon)取回我炒过的墨西哥胡椒酱... 您就知道了。 因此,今天我想我希望搜索条件使用区分大小写但不区分变音的排序规则,但找不到一个。是否有充分的理由还是我的情况很少见? 这是我正在查看的一些文档示例(尽管认为与供应商/版本无关): SQL Server排序规则名称(SQL Server 2008 R2)

1
为什么要在文本列上索引text_pattern_ops?
今天,《七周》中的七个数据库向我介绍了每个操作员的索引。 您可以通过创建text_pattern_ops运算符类别索引来为模式与先前查询匹配的字符串建立索引,只要这些值以小写形式索引即可。 CREATE INDEX moves_title_pattern ON movies ( (lower(title) text_pattern_ops); 我们使用了,text_pattern_ops因为标题是文本类型。如果需要指数VARCHAR处理,字符,或名称,使用相关的OPS: ,varchar_pattern_ops,bpchar_pattern_ops和name_pattern_ops。 我发现该示例确实令人困惑。为什么这样做有用? 如果列是文本类型,在用作搜索值之前,是否会将其他类型(varchar,char,name)强制转换为文本? 该索引的行为与使用默认运算符的索引有何不同? CREATE INDEX moves_title_pattern ON movies (lower(title));

2
从SQL 2005 [SQL_Latin1_General_CP1_CI_AS]迁移到2008-我将通过使用“向后兼容性”来丢失任何功能
我们正在从SQL 2005 [实例和数据库的归类为SQL_Latin1_General_CP1_CI_AS]到SQL 2008 [默认为Latin1_General_CI_AS]。 我完成了SQL 2008 R2的安装,并使用了默认Latin1_General_CI_AS排序规则,并且数据库还原仍在进行中SQL_Latin1_General_CP1_CI_AS。发生了例外的问题- Latin1_General_CI_AS数据库在 其中的#temp表所在的位置 SQL_Latin1_General_CP1_CI_AS,这就是我现在所在的位置-我现在需要有关陷阱的建议。 在安装SQL 2008 R2中,我对安装使用的选项'SQL Collation, used for backwards compatibility',我必须选择相同的排序规则为2005数据库的选项:SQL_Latin1_General_CP1_CI_AS。 这将使我在#temp表上没有问题,但是有陷阱吗? 如果不使用SQL 2008的“当前”排序规则,是否会丢失任何类型的功能或特性? 当我们从2008年迁移到SQL 2012时(例如,在2年内)怎么办?那我有问题吗? 我会在某个时候被迫去Latin1_General_CI_AS吗? 我读到一些DBA的脚本完成了完整数据库的行,然后使用新的排序规则将插入脚本运行到数据库中-我对此感到非常害怕和警惕-您会建议这样做吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.