标题：代码页
概况
代码页是字符集编码的别名，也有人称"内码表"。早期，代码页是IBM称呼电脑BIOS本身支持的字符集编码的名称。当时通用的操作系统都是命令行界面系统，这些操作系统直接使用BIOS供应的VGA功能来显示字符，操作系统的编码支持也就依靠BIOS的编码。现在这BIOS代码页被称为OEM代码页。图形操作系统解决了此问题，图形操作系统使用自己字符呈现引擎可以支持很多不同的字符集编码。
早期IBM和微软内部使用特别数字来标记这些编码，其实大多的这些编码已经有自己的名称了。虽然图形操作系统可以支持很多编码，很多微软程序还使用这些数字来点名某编码。
代码页简介
概述  对于字符和 Unicode 数据的位模式的定义，此模式代表特定字母、数字或符号（例如 0x20 代表一个空格，而 0x74 代表字符“t”）。一些数据类型每个字符使用一个字节；每个字节可以具有 256 个不同的位模式中的一个模式。
在计算机中，字符由不同的位模式（ON   或   OFF）表示。每个字节有   8   位，这   8   位可以有   256   种不同的   ON   和   OFF   组合模式。对于使用   1   个字节存储每个字符的程序，通过给每个位模式指派字符可表示最多   256   个不同的字符。2   个字节有   16   位，这   16   位可以有   65,536   种唯一的   ON   和   OFF   组合模式。使用   2   个字节表示每个字符的程序可表示最多   65,536   个字符。
单字节代码页单字节代码页是字符定义，这些字符映射到每个字节可能有的   256   种位模式中的每一种。代码页定义大小写字符、数字、符号以及   !、@、#、%   等特殊字符的位模式。每种欧洲语言（如德语和西班牙语）都有各自的单字节代码页。虽然用于表示   A   到   Z   拉丁字母表字符的位模式在所有的代码页中都相同，但用于表示重音字符（如"é"和"á"）的位模式在不同的代码页中却不同。如果在运行不同代码页的计算机间交换数据，必须将所有字符数据由发送计算机的代码页转换为接收计算机的代码页。如果源数据中的扩展字符在接收计算机的代码页中未定义，那么数据将丢失。如果某个数据库为来自许多不同国家的客户端提供服务，则很难为该数据库选择这样一种代码页，使其包括所有客户端计算机所需的全部扩展字符。而且，在代码页间不停地转换需要花费大量的处理时间。
双字节代码页仅靠单字节字符集存储许多语言所使用的字符也是不够的。例如，一些亚洲语言包含上千个字符，所以每个字符必须使用双字节。双字节字符集正是为这些语言定义的。但是，这些语言都有各自的代码页，在运行不同双字节代码页的计算机之间传输数据也存在困难。
代码页
代码页   描述     
1258   越南语     
1257   波罗的语     
1256   阿拉伯语     
1255   希伯来语     
1254   土耳其语     
1253   希腊语     
1252   拉丁   1   字符   (ANSI)     
1251   西里尔语     
1250   中欧语言     
950   繁体中文     
949   朝鲜语     
936   简体中文     
932   日语     
874   泰国语     
850   多语种   (MS-DOS   Latin1)     
437   MS-DOS   美国英语
Unicode   标准
为解决在网络中支持多种代码页时出现的字符转换和解释问题，ISO   标准化组织和称为   Unicode   Consortium   的团体定义了   Unicode   标准。Unicode   使用双字节存储每个字符。由于   65,536   个字符足以涵盖世界上所有语言常用的字符，因此   Unicode   标准适用于所有的主要语言。如果网络中的所有计算机和程序都使用   Unicode，则无需进行任何字符转换，每个用户与所有其它用户看到的字符完全相同，并且不会丢失任何字符。   
在运行   Microsoft   Windows®   操作系统的计算机上，操作系统和   Windows   应用程序使用的代码页由   Windows   区域设置定义。区域设置是在安装操作系统时选择的。Windows   应用程序使用由   Windows   区域设置定义的代码页来解释数据。Windows   应用程序还支持宽字符数据，即   Unicode   数据。
SQL   Server   2000相关
支持两类字符数据类型：
Unicode   数据类型nchar、nvarchar   和   ntext。这些数据类型使用   Unicode   字符表示法。代码页不适用于这些数据类型。
非   Unicode   字符数据类型char、varchar   和   text。这些数据类型使用单字节或双字节代码页中定义的字符表示法。     
有关字符数据的存储方式以及代码页、Unicode   和排序次序操作的更多信息，请参见在   [1]   MSDN®   页中的   Developing   International   Software   for   Windows   95   and   Windows   NT   4.0。
国际化数据和   Unicode当只使用字符数据和代码页时，在一个数据库内很难以多种语言存储数据。很难为数据库找到一种代码页，能够存储所需全部语言特有的字符。对于运行各种代码页的不同客户端所读取和更新的特殊字符，要确保正确地转换也很困难。支持国际化客户端的数据库应始终使用   Unicode   数据，而不应使用非   Unicode   数据类型。   
例如，北美洲客户的数据库必须处理三种主要语言：     
墨西哥使用的西班牙文名称和地址。   
魁北克使用的法文名称和地址。   
加拿大的其余地区和美国使用的英文名称和地址。     
当只使用字符列和代码页时须小心，以确保数据库所安装的代码页能够处理这三种语言的字符。当其中一种语言的字符由运行另一种语言的代码页的客户端读取时，必须更加小心以确保能够正确转换字符。
设置代码页的方法
通过DOS命令在DOS下可以通过mode命令来设置代码页。
选定代码页:　　 MODE CON[:] CP SELECT=yyy
代码页状态:　　 MODE CON[:] CP [/STATUS]
按Windows+R组合键，然后输入cmd或者command打开命令提示符。
比如输入：mode con cp select=936，则表示显示简体中文。如果输入mode con cp select=437，则表示显示MS-DOS   美国英语，而中文显示将会是?。
通过C语言函数方法一：
通过system函数调用dos命令，该函数的头文件是stdlib.h。
例：system("mode con cp select=936");
方法二：
通过API函数SetConsoleOutputCP来实现
程序例：
#include <windows.h>
#include <stdio.h>
int main( void )
{
SetConsoleOutputCP(936);
printf("简体中文\n");
return 0;
}
输出：
简简体体中中文文
Press any key to continue
如果将代码页设置为437，那么无法正常输出简体中文：
╝≥╠σ╓╨╬─
Press any key to continue
现状
随着   Internet   的发展，支持众多运行不同区域设置的客户端计算机变得日益重要。很难选择这样一种代码页，使其包含的字符数据类型能够支持全球范围用户所需的全部字符。   
管理国际化数据库中的字符数据的最简单方法是始终使用   Unicode   nchar、nvarchar   和   ntext   数据类型，代替对应的非   Unicode   数据类型（char、varchar   和   text）。如果所有使用国际化数据库的应用程序也采用   Unicode   变量而不是非   Unicode   变量，那么在系统中的任何地方都无须进行字符转换。每个客户端与所有其它客户端看见的字符数据都完全相同。   
对于可使用单字节代码页的系统，Unicode   数据需要的存储空间是非   Unicode   字符数据的两倍，但却消除了在代码页间转换扩展字符的必要，因此至少部分弥补了上面的不足。使用双字节代码页的系统没有这个问题。   
SQL   Server   2000   将所有的文本化系统目录数据都存储在包含   Unicode   数据类型的列中。数据库对象（如表、视图和存储过程）的名称存储在   Unicode   列中。这样就可以只使用   Unicode   开发应用程序，从而避免了所有的代码页转换问题。   
排序次序   
排序次序指定   SQL   Server   解释、排序、比较和显示字符数据所使用的规则。例如，排序次序定义"a"是小于、等于还是大于"b"。排序次序定义排序规则是否区分大小写，例如"m"和"M"是否相同。另外还定义排序规则是否区分重音，例如"á"和"&auml;"是否相同。   
SQL   Server   2000   对每种排序规则使用两种排序次序，一种用于   Unicode   数据，另一种用于字符代码页。   
许多   SQL   Server   排序规则使用相同的代码页，但是代码页的排序次序不同。这使站点得以选择：     
是否仅根据位模式所表示的数字值来排序字符。二进制排序的速度最快，这是因为   SQL   Server   不用做任何调整并可使用快速、简单的排序算法。二进制排序次序始终区分大小写。由于代码页中的位模式可能不按照特定语言的字典规则所定义的序列排列，二进制排序有时并不按照使用该语言的用户所期待的序列对字符进行排序。