查询服务器ORACLE字符集: select userenv('language') from dual; ------------------以上查询oracle server端的字符集
NLS_LANG=<language>_<territory>.<client character set> Language: 显示oracle消息,校验,日期命名 Territory:指定默认日期、数字、货币等格式 Client character set:指定客户端将使用的字符集 此例表示oracle服务端 SIMPLIFIED CHINESE是语言,CHINESE_CHINA是地区,AL32UTF8是客户端字符集
----------再查询数据库字符集 select * from nls_database_parameters;
名词解释:
NLS_DATE_LANGUAGE specifies the language to use for the spelling of day and month names and date abbreviations (a.m., p.m., AD, BC) returned by the TO_DATE and TO_CHAR functions. NLS_LANGUAGE specifies the default language of the database. This language is used for messages, day and month names, symbols for AD, BC, a.m., and p.m., and the default sorting mechanism. This parameter also determines the default values of the parameters NLS_DATE_LANGUAGE and NLS_SORT.
此时知道字符集是AL32UTF8,即通用字符集 NLS_DATE_LANGUAGE,即数据库默认日期语言是AMERICAN。 所以sqlplus运行正常。 但客户端错误,我们在客户端运行一句SQL就明白了 select TO_CHAR(ADD_MONTHS(hire_date, 6),'DL') from hr.employees; 客户端数据库默认日期是简体中文,所以在NEXT_DAY()函数时找不到英文的 MONDAY到SUNDAY,这样问题就知道来由了。 验证一下: select * from NLS_SESSION_PARAMETERS;