<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sybase数据库技术，数据库恢复专家 &#187; 排序顺序</title>
	<atom:link href="http://www.dbainfo.net/tag/%e6%8e%92%e5%ba%8f%e9%a1%ba%e5%ba%8f/feed" rel="self" type="application/rss+xml" />
	<link>https://www.dbainfo.net</link>
	<description>提供Sybase ASE及Sybase SQL Anywhere数据库修复服务，电话：13811580958(微信)，QQ：289965371！We have many years of experience in recovering data from damanged Sybase devices. Contact us by Phone: +86 13811580958 Wechat: 13811580958 Email: 289965371@qq.com</description>
	<lastBuildDate>Sat, 14 Jun 2025 16:28:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>如何使Sybase ASE中对象名不区分大小写？</title>
		<link>https://www.dbainfo.net/sybase-ase-objectname-case-insensitive.htm</link>
		<comments>https://www.dbainfo.net/sybase-ase-objectname-case-insensitive.htm#comments</comments>
		<pubDate>Tue, 07 Sep 2010 03:20:58 +0000</pubDate>
		<dc:creator>dbainfo</dc:creator>
				<category><![CDATA[Sybase ASE]]></category>
		<category><![CDATA[字符集]]></category>
		<category><![CDATA[排序顺序]]></category>

		<guid isPermaLink="false">http://www.dbainfo.net/?p=154</guid>
		<description><![CDATA[在Sybase ASE中默认的情况是对象名或者字段名区分大小写，数据库内的字符按照二进制进行排序。单字节字符就按照字符的ASCII值排序，对于多字节（如：一个汉字）字符则是按照第一个字节的ASCII值进行排序。此时，汉字的排序是没有意义的。 但是，有时候会遇到要求对象名或者对象字段名不区分大小写的情况。比如：将其他rdbms的数据库移植到sybase ASE数据库（比如：ASA，oracle等）；业务系统要求对象名不区分大小写等场景。 本文介绍在Sybase ASE 15.0.3中调整字符集和排序顺序使得ASE不区分对象名和字段名的大小写。 在谈到数据库的字符集时，不得不提到数据库的排序顺序。字符集和排序顺序的关系如此紧密，必须同时调整二者才能实现在ASE中不区分对象名的大小写。 ASE中的字符集有很多种，随着版本的升级，好像字符集种类也是越来越丰富。在ASE11.9.2版本中还没有支持简体中文的字符集cp936,仅有eucgb这个中文字符集。在最新的ASE15.x版本中，可以用作简体中文的字符集有：cp936,eucgb,gb18030,utf8；支持繁体中文的字符集有:cp950,big5,big5hk,euccns,utf8。如果仅仅需要支持简体中文的话，那么用cp936足够了。考虑ASE数据库支持国际化，则可选用utf8。 如何既支持简体中文又能容纳繁体中文呢？ 对于此问题，我感觉应该用utf8字符集。因为在ASE中简体或者繁体中文分别有不同的字符集，只能选择一个最“包容”，范围最广的字符集：utf8。 转入正题： 我的测试环境安装的ASE字符集为：iso_1，默认的字符集排序顺序为：bin__iso_1。无论对象名还是对象内的数据，都是严格区分大小写的。 第一步：检查数据库内是否安装了不区分大小写的iso_1字符集。 select id,name from master..syscharsets where name like '%iso_1%' 查询结果为： 1&#62; select id,name from master..syscharsets where name like '%iso_1%' 2&#62; go id  name --- ------------------------------ 50 bin_iso_1 1 iso_1 &#160; (2 rows affected) 说明数据库内安装有iso_1字符集和按照二进制值进行排序的bin_iso_1（排序顺序在其他rdbms中好像被称为collate，不太好翻译，有的翻译为“整理”，感觉很别扭。在mssqlserver和mysql中都有这个概念。） 第二步：安装不区分大小的iso_1的整理collate 切换到字符集目录下： cd %sybase%\charsets\iso_1 (unix下位：cd $SYBASE/charsets/iso_1) 发现D:\sybase\charsets\iso_1中有几个*.srt文件，它们分别对应不同的“整理”--排序顺序。 D:\sybase\charsets\iso_1&#62;dir [...]]]></description>
			<content:encoded><![CDATA[<p>在Sybase ASE中默认的情况是对象名或者字段名区分大小写，数据库内的字符按照二进制进行排序。单字节字符就按照字符的ASCII值排序，对于多字节（如：一个汉字）字符则是按照第一个字节的ASCII值进行排序。此时，汉字的排序是没有意义的。</p>
<p>但是，有时候会遇到要求对象名或者对象字段名不区分大小写的情况。比如：将其他rdbms的数据库移植到sybase ASE数据库（比如：ASA，oracle等）；业务系统要求对象名不区分大小写等场景。</p>
<p><strong>本文介绍在Sybase ASE 15.0.3中调整字符集和排序顺序使得ASE不区分对象名和字段名的大小写。</strong></p>
<p>在谈到数据库的字符集时，不得不提到数据库的排序顺序。字符集和排序顺序的关系如此紧密，必须同时调整二者才能实现在ASE中不区分对象名的大小写。</p>
<p>ASE中的字符集有很多种，随着版本的升级，好像字符集种类也是越来越丰富。在ASE11.9.2版本中还没有支持简体中文的字符集cp936,仅有eucgb这个中文字符集。在最新的ASE15.x版本中，可以用作简体中文的字符集有：cp936,eucgb,gb18030,utf8；支持繁体中文的字符集有:cp950,big5,big5hk,euccns,utf8。如果仅仅需要支持简体中文的话，那么用cp936足够了。考虑ASE数据库支持国际化，则可选用utf8。</p>
<p>如何既支持简体中文又能容纳繁体中文呢？</p>
<p>对于此问题，我感觉应该用utf8字符集。因为在ASE中简体或者繁体中文分别有不同的字符集，只能选择一个最“包容”，范围最广的字符集：utf8。</p>
<p>转入正题：</p>
<p>我的测试环境安装的ASE字符集为：iso_1，默认的字符集排序顺序为：<strong>bin__iso_1</strong>。无论对象名还是对象内的数据，都是严格区分大小写的。</p>
<p>第一步：检查数据库内是否安装了不区分大小写的iso_1字符集。</p>
<p>select id,name from master..syscharsets where name like '%iso_1%'</p>
<p>查询结果为：</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">1&gt; select id,name from master..syscharsets where name like '%iso_1%'
2&gt; go
 id  name
 --- ------------------------------
 50 bin_iso_1
 1 iso_1
&nbsp;
(2 rows affected)</pre></div></div>

<p>说明数据库内安装有iso_1字符集和按照二进制值进行排序的bin_iso_1（排序顺序在其他rdbms中好像被称为collate，不太好翻译，有的翻译为“整理”，感觉很别扭。在mssqlserver和mysql中都有这个概念。）</p>
<p>第二步：安装不区分大小的iso_1的整理collate</p>
<p>切换到字符集目录下：</p>
<p>cd %sybase%\charsets\iso_1 (unix下位：cd $SYBASE/charsets/iso_1)</p>
<p>发现D:\sybase\charsets\iso_1中有几个*.srt文件，它们分别对应不同的“整理”--排序顺序。</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">D:\sybase\charsets\iso_1&gt;dir *.srt
 驱动器 D 中的卷没有标签。
 卷的序列号是 24C3-2A76
&nbsp;
 D:\sybase\charsets\iso_1 的目录
&nbsp;
2004-11-02  02:13               656 binary.srt
2004-11-02  02:13             8,703 dictiona.srt
2004-11-02  02:13             8,703 dictionary.srt
2004-11-02  02:13             8,669 espdict.srt
2004-11-02  02:13             8,682 espnoac.srt
2004-11-02  02:13             8,584 espnocs.srt
2004-11-02  02:13             8,738 noaccent.srt
2004-11-02  02:13             8,738 noaccents.srt
2004-11-02  02:13             9,209 nocase.srt
2004-11-02  02:13             9,312 nocasepr.srt
2004-11-02  02:13             9,312 nocasepref.srt
 11 个文件         89,306 字节
 0 个目录 17,730,179,072 可用字节
&nbsp;
D:\sybase\charsets\iso_1&gt;</pre></div></div>

<p>其中：binary.srt表示二进制排序，dictiona.srt表示按照字典顺序，nocase.srt表示不区分大小的排序（具体的还有：nocasepr.srt，nocasepref.srt,好像是dictionary order,case insensitive with preference，具体没有细研究！）</p>
<p>本文的场景需要nocase.srt这个。</p>
<p>安装nocase.srt这个排序顺序（“整理”）</p>
<p><span style="color: #ff0000;"><strong>charset -Usa -P -Stest nocase.srt iso_1</strong></span></p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">D:\sybase\charsets\iso_1&gt;charset -Usa -P -Stest nocase.srt iso_1
Loading file 'nocase.srt'.
&nbsp;
Found a [sortorder] section.
&nbsp;
This is Class-1 sort order.
&nbsp;
Character set for the sort order is already in the Syscharsets table.
&nbsp;
Sort order (ID = 52 ,CSID = 1 ) with NAME = 'nocase_iso_1' already exists
in the Syscharsets system table.  Do you wish to update this sort order
with the definitions found in your localization file for sort order
(ID = 52, CSID = 1, NAME = 'nocase_iso_1')?
(yes/no):  yes
&nbsp;
Finished loading file 'nocase.srt'.
&nbsp;
1 sort order loaded successfully</pre></div></div>

<p>第三步：在ASE中配置数据库的排序顺序。</p>
<p>首先，检查ASE当前的排序顺序，用sp_helpsort这个系统存错过程。在输出结果的Sort Order Description部分，看到有:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Sort Order Description
&nbsp;
 ------------------------------------------------------------------
 Character Set = 1, iso_1
 ISO 8859-1 (Latin-1) - Western European 8-bit character set.
 Sort Order = 50, bin_iso_1
 Binary ordering, for the ISO 8859/1 or Latin-1 character set (
 iso_1).
Characters, in Order</pre></div></div>

<p>可看出当前排序顺序为：区分大小写的二进制顺序bin_iso_1。</p>
<p>利用如下的SQL语句检查刚才安装的nocase.srt排序顺序在syscharsets表中对应的id值。</p>
<p>select id,name from master.dbo.syscharsets where name like '%iso_1%'</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">1&gt; select id,name from master.dbo.syscharsets where name like '%iso_1%'
2&gt; go
 id  name
 --- ------------------------------
 50 bin_iso_1
 1 iso_1
 52 nocase_iso_1
&nbsp;
(3 rows affected)
1&gt;</pre></div></div>

<p>刚才安装的不区分大小写的排序对应ID为：52。</p>
<p>利用系统存储过程sp_configure 修改默认排序顺序，执行： sp_configure  "default sortorder id",52</p>
<p>执行完毕后，需要重启启动ASE两次（这和改字符集的时候是一样的，）。</p>
<p>ASE启动之后，用sp_configure  "default sortorder id"检查，当前排序顺序值为：52.</p>
<p>用sp_helpsort检查，Sort Order Description部分的信息为:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Sort Order Description
&nbsp;
 ------------------------------------------------------------------
 Character Set = 1, iso_1
 ISO 8859-1 (Latin-1) - Western European 8-bit character set.
 Sort Order = 52, nocase_iso_1
 Case-insensitive dictionary sort order for use with several We
 stern-European languages including English, French, and German
 .  Uses the ISO 8859-1 character set.
Characters, in Order</pre></div></div>

<p>发现，已经修改完成了。下面做个试验测试一下。</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">1&gt; use andkylee
2&gt; go
1&gt; create table ANDKylee(ID int not null,NaMe varchar(30) null)
2&gt; go
1&gt; create table andkylee(id int not null,name varchar(30) null)
2&gt; go
Msg 2714, Level 16, State 1:
Server 'TEST', Line 1:
There is already an object named 'andkylee' in the database.
1&gt; insert into ANDKYLEE values(1,'aaaa')
2&gt; insert into andkylee values(1,'AAAA')
3&gt; insert into aNDKYLEE values(2,'bbBB')
4&gt; insert into andkyLEE values(2,'BBbb')
5&gt; go
(1 row affected)
(1 row affected)
(1 row affected)
(1 row affected)
1&gt; select *  from andkyLEE where name='AAAA'
2&gt; go
 ID          NaMe
 ----------- ------------------------------
 1 aaaa
 1 AAAA
&nbsp;
(2 rows affected)
1&gt; select *  from andkylee where name='aaaa'
2&gt; go
 ID          NaMe
 ----------- ------------------------------
 1 aaaa
 1 AAAA
&nbsp;
(2 rows affected)
1&gt; select *  from andkylee where name='BbBb'
2&gt; go
 ID          NaMe
 ----------- ------------------------------
 2 bbBB
 2 BBbb
&nbsp;
(2 rows affected)
1&gt; select *  from ANDKYLEE order by name
2&gt; go
 ID          NaMe
 ----------- ------------------------------
 1 AAAA
 1 aaaa
 2 BBbb
 2 bbBB
&nbsp;
(4 rows affected)
1&gt;</pre></div></div>

<p>可以发现，对象名，字段名，还有表内的数据都不区分大小写了。</p>
<p>最后强调两点：</p>
<p>1.改成不区分大小写的排序顺序要慎重。对象名或者字段名不区分大小写可能问题不多，需要慎重考虑表内数据是否真正地不区分大小写。</p>
<p>2.最好在刚安装完ASE数据库服务器后修改数据库的排序顺序，或者确保各个库内已有的对象名在不区分大小写后是<strong>唯一</strong>的。我在测试的时候遇到在转化后即将导致sysobjects索引键冲突而失败的情况。</p>
<p>用户库andkylee内原来用testA和testa两种表，在转化的过程报如下的错误：</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">00:00000:00001:2010/09/06 11:26:34.59 server  Rebuilding indexes for andkylee..sysobjects.
00:00000:00001:2010/09/06 11:26:34.70 server  Error: 1505, Severity: 16, State: 2
00:00000:00001:2010/09/06 11:26:34.71 server  Create unique index aborted on duplicate key.  Primary key is '&quot;testa&quot;, 1'
00:00000:00001:2010/09/06 11:26:34.76 server  Error: 3436, Severity: 20, State: 2
00:00000:00001:2010/09/06 11:26:34.76 server  Cannot rebuild index 2 for the 'sysobjects' table in the 'andkylee' database.
00:00000:00001:2010/09/06 11:26:34.76 server  Error: 3434, Severity: 20, State: 1
00:00000:00001:2010/09/06 11:26:34.76 server  Cannot change sortorder. Server shutting down.  Restart to continue with sortorder unchanged.
00:00000:00001:2010/09/06 11:26:34.76 kernel  ueshutdown: exiting
&nbsp;
 </pre></div></div>

<p>有问题，欢迎讨论！</p>
<p>————————————————————————————————————<br />
——— 本文为andkylee个人原创，请在尊重作者劳动成果的前提下进行转载；<br />
——— 转载务必注明原始出处 : <a href="../">http://www.dbainfo.net</a><br />
——— 关键字： ASE 字符集 排序顺序 iso_1 nocase_iso_1 sp_helpsort default sortorder id<br />
————————————————————————————————————
<div style="clear: both; margin: 10px 0pt; border: 1px dashed rgb(153, 153, 153); font-size: 12px; padding: 5px 10px;">
<li>本文链接地址：<a href="https://www.dbainfo.net/sybase-ase-objectname-case-insensitive.htm">https://www.dbainfo.net/sybase-ase-objectname-case-insensitive.htm</a>；</li>
<li>本文为dbainfo个人原创，请在尊重作者劳动成果的前提下进行转载；</li>
<li>转载务必注明原始出处 : <a href="https://www.dbainfo.net/">Sybase数据库技术，数据库恢复专家</a>；</li>
<li>对《<a href="https://www.dbainfo.net/sybase-ase-objectname-case-insensitive.htm">如何使Sybase ASE中对象名不区分大小写？</a>》有何疑问或见解，请在本文下方发表；</li>
<li>对网站还有其他问题或建议，请提交在<a href="https://www.dbainfo.net/messages" target="_blank">留言板</a>，谢谢！</li>
</div>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2013-04-02 -- <a href="https://www.dbainfo.net/ase-3rt-party-tools-illegal-chinese-words.htm" title="使用第三方工具访问ASE表时汉字乱码问题的解决方法">使用第三方工具访问ASE表时汉字乱码问题的解决方法</a> (1)</li><li>2010-12-20 -- <a href="https://www.dbainfo.net/ase-character-set-support-simplified-chinese.htm" title="Sybae ASE中支持简体中文的字符集">Sybae ASE中支持简体中文的字符集</a> (2)</li><li>2010-09-14 -- <a href="https://www.dbainfo.net/bcp-out-disable-character-set-convertion.htm" title="bcp导出数据时禁止字符集转化">bcp导出数据时禁止字符集转化</a> (2)</li><li>2010-09-14 -- <a href="https://www.dbainfo.net/sybase-central-ase-character-set.htm" title="用Sybase Central连接ASE数据库乱码问题的解决">用Sybase Central连接ASE数据库乱码问题的解决</a> (2)</li><li>2010-09-13 -- <a href="https://www.dbainfo.net/sybase-ase-1503-character-set-utf8-chinese-language.htm" title="Sybase ASE 15.0.3 for windows 安装中文语言支持、配置字符集">Sybase ASE 15.0.3 for windows 安装中文语言支持、配置字符集</a> (0)</li><li>2010-03-18 -- <a href="https://www.dbainfo.net/sybase-character-set-and-convertion.htm" title="Sybase字符集配置与转化">Sybase字符集配置与转化</a> (0)</li><li>2010-01-14 -- <a href="https://www.dbainfo.net/sybase-character-set.htm" title="关于sybase的字符集问题">关于sybase的字符集问题</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>https://www.dbainfo.net/sybase-ase-objectname-case-insensitive.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
