在做项目时使用sql developer导入sql脚本,当执行到其中的
insert into T_USER(user_id,user_name,password) values('root','系统管理员','root');时,提示数据超出字段长度,user_name字段我设置为20,可是却提示
数据长度为24,可是“系统管理员”命名只有5个字符,查看发现是因为乱码后成为8个类中文字符,而utf-8用三个字节表示中文字符,所以就是长度为24.
问题搞清楚了,原来是oracle编码是utf-8导致,所以考虑将编码由utf改成gbk,txt文件采用asc编码(默认按照本地编码)
从网上参考了一些资料,自己实施后发现问题解决了,现将解决过程整理出来,如下:
conn system/system as sysdba;
已连接
SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 778387456 bytes
Fixed Size 1374808 bytes
Variable Size 377488808 bytes
Database Buffers 394264576 bytes
Redo Buffers 5259264 bytes
数据库装载完毕。
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
系统已更改。
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
系统已更改。
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
系统已更改。
SQL> ALTER DATABASE OPEN;
数据库已更改。
SQL> alter database character set internal_use zhs16gbk;
数据库已更改。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 778387456 bytes
Fixed Size 1374808 bytes
Variable Size 377488808 bytes
Database Buffers 394264576 bytes
Redo Buffers 5259264 bytes
数据库装载完毕。
数据库已经打开。
SQL>
---------------------------
查看编码格式:
select userenv('language') from dual;
select * from nls_database_parameters
insert into T_USER(user_id,user_name,password) values('root','系统管理员','root');时,提示数据超出字段长度,user_name字段我设置为20,可是却提示
数据长度为24,可是“系统管理员”命名只有5个字符,查看发现是因为乱码后成为8个类中文字符,而utf-8用三个字节表示中文字符,所以就是长度为24.
问题搞清楚了,原来是oracle编码是utf-8导致,所以考虑将编码由utf改成gbk,txt文件采用asc编码(默认按照本地编码)
从网上参考了一些资料,自己实施后发现问题解决了,现将解决过程整理出来,如下:
conn system/system as sysdba;
已连接
SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 778387456 bytes
Fixed Size 1374808 bytes
Variable Size 377488808 bytes
Database Buffers 394264576 bytes
Redo Buffers 5259264 bytes
数据库装载完毕。
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
系统已更改。
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
系统已更改。
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
系统已更改。
SQL> ALTER DATABASE OPEN;
数据库已更改。
SQL> alter database character set internal_use zhs16gbk;
数据库已更改。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 778387456 bytes
Fixed Size 1374808 bytes
Variable Size 377488808 bytes
Database Buffers 394264576 bytes
Redo Buffers 5259264 bytes
数据库装载完毕。
数据库已经打开。
SQL>
---------------------------
查看编码格式:
select userenv('language') from dual;
select * from nls_database_parameters