微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有可能为Windows 7和/或8创build不区分大小写的自定义区域设置?

动机:我想以不区分大小写的方式在Postgresql中使用string。 我知道CITEXT数据types,我也知道function索引,我可以使用LOWER函数

尽pipe如此,最有效的解决scheme似乎是使用不区分大小写的sorting规则 – 在sql Server中是微不足道的。 无论如何,看来Postgresql无法定义自己的自定义sorting规则,而是从操作系统中find的语言环境(例如Windows)中派生它们。

所以,问题是这样的 – 是否有可能创build一个自定义的Windows语言环境,以不区分大小写的方式处理字符?

我能得到的最远处是安装语言环境生成器 ,并将en-US语言环境导出到相应的XML表示(称为LDML),以查看内部的内容。 寻找sort关键字返回这两行:

在不考虑区域设置的情况下处理不区分大小写的情况

如何从git-svn中恢复一个不同的封装的dulplicate文件在存储库中?

什么是最有效的不区分大小写的grep用法

不区分大小写在文件名linux中用“string”search文件

Wcsstr不区分大小写

<msLocale:sortName type="en-US" /> <msLocale:sortGuid type="{00000001-57EE-1E5C-00B4-D0000BB1E11E}" />

该guid可以在Windowsregistry中find:

[HKEY_LOCAL_MACHInesYstemCurrentControlSetControlNlsSortingIds] @="{00000001-57EE-1E5C-00B4-D0000BB1E11E}" "mn-Mong"="{00000001-57EE-1E5C-00B4-D0000BB1E11E}"

(键下有更多的string值)

这不会导致任何地方。 我没有比以前更接近不区分大小写的自定义区域设置。

LDML可以用来描述不区分大小写的区域,但是我不知道如何构build一个区域。

任何帮助深表感谢。

编辑

思考的食物:

sql Server:

SELECT 'latin1_General_CS_AS' AS 'Collation',COLLATIONPROPERTY('latin1_General_CS_AS','CodePage') AS 'CodePage','LCID') AS 'LCID',CONVERT(VARBINARY(8),'ComparisonStyle')) AS 'ComparisonStyle','Version') AS 'Version' UNION ALL SELECT 'latin1_General_CI_AS' AS 'Collation',COLLATIONPROPERTY('latin1_General_CI_AS','Version') AS 'Version'

产量

Collation CodePage LCID ComparisonStyle Version latin1_General_CS_AS 1252 1033 0x00030000 0 latin1_General_CI_AS 1252 1033 0x00030001 0

Win32 API:

CompareStringEx Win32函数

int CompareStringEx( _In_opt_ LPCWSTR lpLocaleName,_In_ DWORD dwCmpFlags,_In_ LPCWSTR lpString1,_In_ int cchCount1,_In_ LPCWSTR lpString2,_In_ int cchCount2,_In_opt_ LPNLsveRSIONINFO lpVersion@R_532_4045@ion,_In_opt_ LPVOID lpReserved,_In_opt_ LParaM lParam );

dwCmpFlags参数的标志可以在C:Program Files (x86)Microsoft SDKsWindowsv7.1AIncludeWinNls.h :

// // String Flags. // #define norM_IGnorECASE 0x00000001 // ignore case #define norM_IGnorENONSPACE 0x00000002 // ignore nonspacing chars #define norM_IGnorESYMBOLS 0x00000004 // ignore symbols #define LINGUISTIC_IGnorECASE 0x00000010 // linguistically appropriate 'ignore case' #define LINGUISTIC_IGnorEDIACRITIC 0x00000020 // linguistically appropriate 'ignore nonspace' #define norM_IGnorEKANATYPE 0x00010000 // ignore kanatype #define norM_IGnorEWIDTH 0x00020000 // ignore width #define norM_LINGUISTIC_CASING 0x08000000 // use linguistic rules for casing

我从中得出结论:

使用latin1_General_CS_AS导致CompareStringEx被调用,标志为norM_IGnorEKANATYPE|norM_IGnorEWIDTH

使用latin1_General_CI_AS导致CompareStringEx被标志调用norM_IGnorEKANATYPE|norM_IGnorEWIDTH|norM_IGnorECASE

但接下来呢? 如何创build类似于latin1_General_CI_AS自己的Windows语言环境,但在sql Server外部可用?

在Linux下的Ruby中不区分大小写打开一个文件

如何更改Linux服务器中的MysqL表名是不区分大小写的?

Windows如何处理不区分大小写的文件名和path?

我如何使Apache不区分大小写使用.htaccess?

在Windows中,不存在不区分大小写的排序规则。 所有的规则都可以排序忽略大小写,但这是通过一个标志来处理,而不是一种排序。 没有办法添加自定义排序方法

可能没有人这样做。 我想这样做是可能的 – 但这种情况没有经过测试,没有人知道是否有一些副作用。

这个问题是在Postgresql待办事项列表中,克雷格林格发送了一个建议如何实现它。 http://www.postgresql.org/message-id/[email protected]

PS

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐