h5case什么网站,做网站咸阳,怎样搭建属于自己的网站,分销是怎么做的服务器端操作系统#xff08;Oracle linux#xff09;字符集
服务器端数据库字符集
客户端操作系统#xff08;Oracle linux#xff09;字符集
客户端工具sqlplus字符集 结论1#xff1a;客户端工具sqlplus的会话#xff0c;使用的字符集#xff0c;是数据库字符集。…服务器端操作系统Oracle linux字符集
服务器端数据库字符集
客户端操作系统Oracle linux字符集
客户端工具sqlplus字符集 结论1客户端工具sqlplus的会话使用的字符集是数据库字符集。如果客户端用户的env环境变量设置了NLS_LANG变量则优先使用这个变量指定的字符集。
结论2通过客户端工具往数据库写入内容时存储到表中的字段是按照写入时客户端工具的字符集编码进行存储的。
结论3操作系统的环境变量LANG中字符集对客户端工具执行sql返回的数据结果如何显示没有影响。
环境字符集 服务器
env命令查看服务器操作系统的字符集 数据库字符集
SELECT parameter, value
FROM NLS_DATABASE_PARAMETERS
WHERE parameter IN (NLS_CHARACTERSET, NLS_NCHAR_CHARACTERSET);
或者
SELECT * FROM V$NLS_PARAMETERS
WHERE parameter IN (NLS_CHARACTERSET, NLS_NCHAR_CHARACTERSET);
查看数据库字符集NLS_CHARACTERSET、国家字符集NLS_NCHAR_CHARACTERSET设置。 客户端
env命令查看客户机的字符集
使用的服务器上的客户端工具sqlplus所以客户端机器就是服务器机器。字符集同上。
启动sqlplus默认会话的NLS参数如下
SELECT * FROM NLS_SESSION_PARAMETERS; 使用命令修改机器当前会话的环境变量
export NLS_LANGSIMPLIFIED CHINESE_CHINA.UTF8 可
export NLS_LANGSIMPLIFIED CHINESE_CHINA.ZHS16GBK 不可
export NLS_LANGSIMPLIFIED CHINESE_CHINA.UTF-8 不可
export LANGzh_CN.UTF8 不可
修改前之前用sqldeveloper插入的中文显示乱码 机器会话env环境变量如下所示已经发生变化 登录sqlplus查看会话环境变量 实验操作
export NLS_LANGSIMPLIFIED CHINESE_CHINA.ZHS16GBK
客户端工具字符集
默认
即当前会话字符集登录客户端执行SELECT * FROM NLS_SESSION_PARAMETERS;
如前截图所示NLS_LANGUAGE、NLS_TERRITORY推测客户端工具sqlplus会话默认使用数据库字符集。
进一步验证调整数据库字符集再执行SELECT * FROM NLS_SESSION_PARAMETERS;
截图如下已经发生了变化。
alter system set NLS_LANGUAGESIMPLIFIED CHINESE scopespfile;
alter system set NLS_TERRITORYCHINA scopespfile;
SELECT * FROM V$NLS_PARAMETERS 重新执行查看sqlplus会话参数与已经更改的数据库字符集一致
SELECT * FROM NLS_SESSION_PARAMETERS; 使用如下命令再改回验证完全没问题。
alter system set NLS_LANGUAGEAMERICAN scopespfile;
alter system set NLS_TERRITORYAMERICA scopespfile;
注意查看调整结果时要开启新的会话窗口才能看到最新的调整结果。
环境变量
当sqlplus所在机器的环境变量中包含NLS_LANG环境变量时sqlplus会话会优先获取变量值可以查询NLS_SESSION_PARAMETERS进行验证。
设置环境变量
export NLS_LANGSIMPLIFIED CHINESE_CHINA.UTF8
设置前SELECT * FROM NLS_SESSION_PARAMETERS; 调整 字符集不一致时
客户端两个窗口一个字符集是UTF8A、一个字符集是ZHS16GBKB数据库字符集是ZHS16GBK。A和B分别向数据库中写入一条中文记录然后A和B再读取该表中刚写入的中文记录。
export NLS_LANGSIMPLIFIED CHINESE_CHINA.UTF8
sqlplus test2/test2
insert into ttest values(哈哈);
commit; export NLS_LANGSIMPLIFIED CHINESE_CHINA.ZHS16GBK
sqlplus test2/test2
insert into ttest values(嘻嘻);
commit;
从以上可以看出向数据库表中写入字段内容时是按照客户端当时的会话字符集向数据库写入的而与数据库字符集无关。而客户端会话读取数据库字段时要与存储时的字符集相符否则乱码。
字符集处理函数
dump函数
参照
https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions108.htm#i78230
select dump(c1,1016) from ttest;
该函数返回的字符集是当前数据库的字符集并不是存储该字段时的字符集。
客户端会话UTF8字符集哈哈是客户端会话字符集为UTF8时写入
export NLS_LANGSIMPLIFIED CHINESE_CHINA.UTF8 客户端会话ZHS16GBK字符集嘻嘻是客户端会话字符集为ZHS16GBK时写入
export NLS_LANGSIMPLIFIED CHINESE_CHINA.ZHS16GBK