问题描述:
在项目中向Oracle插入数据时报错::ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值。
这是因为我的Oracle数据库字符集为32位编码的字符集,所能存储的汉字大大缩减。
解决办法:
执行“select userenv('language') from dual;”查看字符集,显示为AL32UTF8,将其修改为ZHS16GBK后问题解决。
Oracle 11g修改字符集为ZHS16GBK方法:
1. cmd下,cd到oracle数据库软件的服务器端 如:D:\oraclexe\app\oracle\product\11.2.0\server\bin
2. 输入set ORACLE_SID=你想进入的数据库的那个sid,我的为XE
3. 输入 sqlplus /nolog
将数据库启动到RESTRICTED模式下做字符集更改:
sysdba角色登录Oracle:
conn /as sysdba
关闭数据库:
shutdown immediate;
以mount打来数据库:
startup mount
设置session :
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
开启数据库:
alter database open;
修改数据库字符集为ZHS16GBK:
ALTER DATABASE CHARACTER SET ZHS16GBK;
这时候会报错:ORA-12712: new character set must be a superset of old character set ,提示我们新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:
跳过超集检查修改字符集:
ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
查看字符集是否被修改:
select * from v$nls_parameters;
重启检查是否更改完成:
shutdown immediate;
startup
select * from v$nls_parameters;
参考文章: