database character set and national character set

一直以来对于数据库的字符集有着莫名的恐惧,缘由是不是很好的区分”字符集”和”国家字符集”。我先说很陌生的国家字符集,一般在oracle安装过程中,仅仅有两个option选项,一个是AL16UTF16,另外一个是UTF-8,对于亚洲或者直接那中文来
说,AL16UTF16更为适合,它是定长的,在存储空间上更为节省,而utf-8是变长的,三个字节标示一个汉字,不过不用担心,dba长产担心的乱码问题,无论国家字符集选择哪个都不会发生,国家字符集是满足oracle中,nchar,nclob,nvarchar2等类似的存储,而这些类型用的还是比较少的,国家字符集可以理解为数据库字符集的一个补充。再来说传统意义上容易产生乱码的字符集设置,这个字符集便是al32utf8,zh16gbk之流了,它主要告诉数据库以何种编码方式存放数据,是unicode的utf-8还gbk?..等等。每个dba都知道在做imp/exp数据导入导出的时候,需要注意nls_lang客户端字符集尽量要和db的字符集一致。例如通过如下手段:export NLS_LANG=american_america.zhs16gbk