服务器端:
数据库字符集:ZHS16GBK
数据库国家字符集:AL16UTF16
客户端:
NLS_LANG:AL32UTF8
环境变量:ORA_NCHAR_LITERAL_REPLACE =TRUE
这样的字符集设置,改变了客户端NLS_LANG与环境变量。如果不改变任何默认设置,比如客户端NLS_LANG仍然是ZHS16GBK,也不要什么环境变量设置,那可以实现多国文字的正确存储吗?如果你使用VB.NET开发,试试下面的代码:
………………
Dim conn As New System.Data.OracleClient.OracleConnection("database conn string")
Dim cmd As New System.Data.OracleClient.OracleCommand("insert Into mer_categ(S_merc_name ) Values(:S_merc_name)", conn)
cmd.Parameters.Add("S_merc_name", OracleClient.OracleType.NVarChar).Value = "삼성" conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
……………
运行结果一定让你满意。为什么通过设置command参数的形式就可以直接正确地写到数据库中,后台的处理机制还是不得而知,但我的猜测是将字符用数据库国家字符集的Unicode编码直接传到Oracle Server,而不需经过字符集的任何转换。