oracle 插入中文语句 nvarchar2,Oracle不同字符集中对VarChar2和NVarChar2插入它国语言测试...

今天测试了一下,今天在这里不知写什么就贴了出来,测试环境:

Oracle数据库1:中文操作系统,Oracle10g,字符集编码为ZHS16BGK;

Oracle数据库2:中文操作系统,Oracle10g,字符集编码为ALT32UTF8;

客户端:WinXP中文操作系统。

测试过程用代码说话:

//连Oracle数据库1

//哪种插入方式下,中文部分都正常

private void button3_Click(object sender, EventArgs e) {

using (OracleConnection conn = new OracleConnection()) {

conn.ConnectionString = "Data source=serverdb;User ID=dbuser;Pwd=238173";

conn.Open();

OracleCommand cmd = new OracleCommand();

cmd.Connection = conn;

//删除表

try {

cmd.CommandText = "DROP TABLE A001";

cmd.ExecuteNonQuery();

}

catch {

//可能不存在

}

//创建表

cmd.CommandText = "CREATE TABLE A001(ID NUMBER(1), NAME VARCHAR2(100), NAME2 NVARCHAR2(100))";

cmd.ExecuteNonQuery();

//方式一插入数据

cmd.CommandText = "INSERT INTO A001 VALUES(1, N'中国고려대학교上海', N'中国고려대학교上海')";

cmd.ExecuteNonQuery();

//方式二插入数据

cmd.CommandText = "INSERT INTO A001 VALUES(2, :NAME, :NAME2)";

cmd.Parameters.Add("NAME", OracleType.VarChar);

cmd.Parameters.Add("NAME2", OracleType.NVarChar);

cmd.Parameters[0].Value = "中国고려대학교上海"; //包含有它国语言

cmd.Parameters[1].Value = "中国고려대학교上海";

cmd.ExecuteNonQuery();

cmd.Parameters.Clear();

object name;

object name2;

//用数据适配器获取数据

cmd.CommandText = "SELECT NAME, NAME2 FROM A001";

OracleDataAdapter da = new OracleDataAdapter(cmd);

DataTable table = new DataTable();

da.Fill(table);

foreach (DataRow row in table.Rows) {

name = row["NAME"];   //二种方式插入的数据,它国语言部分都显示为乱码

name2 = row["NAME2"]; //用方式一插入的数据,它国语言部分显示为乱码;方式二插入的数据,它国语言部分显示正常

}

cmd.Parameters.Clear();

//用ExecuteScalar获取数据

cmd.CommandText = "SELECT NAME FROM A001 WHERE ID = 1";

name = cmd.ExecuteScalar(); //它国语言部分显示为乱码

cmd.CommandText = "SELECT NAME2 FROM A001 WHERE ID = 1";

name2 = cmd.ExecuteScalar(); //它国语言部分显示为乱码

cmd.CommandText = "SELECT NAME FROM A001 WHERE ID = 2";

name = cmd.ExecuteScalar(); //它国语言部分显示为乱码

cmd.CommandText = "SELECT NAME2 FROM A001 WHERE ID = 2";

name2 = cmd.ExecuteScalar(); //它国语言部分显示正常

//用ExecuteReader获取数据

cmd.CommandText = "SELECT NAME, NAME2 FROM A001";

OracleDataReader reader = cmd.ExecuteReader();

while (reader.Read()) {

name = reader.GetValue(0);  //二种方式插入的数据,它国语言部分都显示为乱码

name2 = reader.GetValue(1); //用方式一插入的数据,它国语言部分显示为乱码;方式二插入的数据,它国语言部分显示正常

}

}

}

//连Oracle数据库2

//哪种插入方式下,中文部分都正常

private void button4_Click(object sender, EventArgs e) {

using (OracleConnection conn = new OracleConnection()) {

conn.ConnectionString = "Data source=testdb;User ID=dbuser;Pwd=dcms";

conn.Open();

OracleCommand cmd = new OracleCommand();

cmd.Connection = conn;

//删除表

try {

cmd.CommandText = "DROP TABLE A001";

cmd.ExecuteNonQuery();

}

catch {

//可能不存在

}

//创建表

cmd.CommandText = "CREATE TABLE A001(ID NUMBER(1), NAME VARCHAR2(100), NAME2 NVARCHAR2(100))";

cmd.ExecuteNonQuery();

//方式一插入数据

cmd.CommandText = "INSERT INTO A001 VALUES(1, N'中国고려대학교上海', N'中国고려대학교上海')";

cmd.ExecuteNonQuery();

//方式二插入数据

cmd.CommandText = "INSERT INTO A001 VALUES(2, :NAME, :NAME2)";

cmd.Parameters.Add("NAME", OracleType.VarChar);

cmd.Parameters.Add("NAME2", OracleType.NVarChar);

cmd.Parameters[0].Value = "中国고려대학교上海"; //有它国语言

cmd.Parameters[1].Value = "中国고려대학교上海";

cmd.ExecuteNonQuery();

cmd.Parameters.Clear();

object name;

object name2;

//用数据适配器获取数据

cmd.CommandText = "SELECT NAME, NAME2 FROM A001";

OracleDataAdapter da = new OracleDataAdapter(cmd);

DataTable table = new DataTable();

da.Fill(table);

foreach (DataRow row in table.Rows) {

name = row["NAME"];   //用方式一插入的数据,它国语言部分显示为乱码;方式二插入的数据,它国语言部分显示正常

name2 = row["NAME2"]; //用方式一插入的数据,它国语言部分显示为乱码;方式二插入的数据,它国语言部分显示正常

}

cmd.Parameters.Clear();

//用ExecuteScalar获取数据

cmd.CommandText = "SELECT NAME FROM A001 WHERE ID = 1";

name = cmd.ExecuteScalar(); //它国语言部分显示为乱码

cmd.CommandText = "SELECT NAME2 FROM A001 WHERE ID = 1";

name2 = cmd.ExecuteScalar(); //它国语言部分显示为乱码

cmd.CommandText = "SELECT NAME FROM A001 WHERE ID = 2";

name = cmd.ExecuteScalar(); //它国语言部分显示正常

cmd.CommandText = "SELECT NAME2 FROM A001 WHERE ID = 2";

name2 = cmd.ExecuteScalar(); //它国语言部分显示正常

//用ExecuteReader获取数据

cmd.CommandText = "SELECT NAME, NAME2 FROM A001";

OracleDataReader reader = cmd.ExecuteReader();

while (reader.Read()) {

name = reader.GetValue(0);  //用方式一插入的数据,它国语言部分显示为乱码;方式二插入的数据,它国语言部分显示正常

name2 = reader.GetValue(1); //用方式一插入的数据,它国语言部分显示为乱码;方式二插入的数据,它国语言部分显示正常

}

}

}

总结:

入数据方式

数据库字符集为ZHS16GBK编码

数据库字符集为AL32UTF8编码

VARCHAR2

NVARCHAR2

VARCHAR2

NVARCHAR2

直接SQL插入

乱码

乱码

乱码

乱码

SQL带参插入

乱码

正常

正常

正常

说明:当前都是在中文操作系统下测试所得,它国语言版操作系统未知;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值