Я столкнулся с проблемой записи китайских иероглифов в базу данных Oracle.Вот некоторая информация для справки.
Среда: Oracle 8
select userenv('language') form dual;
возвращает
American.America.UTF8
Разработка:
.NET2/C#
Набор символов клиента:
gb2312
Я просто проверяю значение записи в таблице вручную, результат правильный и должен бытьследующим образом:
VALUE: 朋友 //chinese word means 'friend'
DUMP: 197,243,211,209 //caculated by Oracle dump() function
Используя код для записи, снимите код следующим образом:
Encoding def = Encoding.Default;
Encoding utf8 = Encoding.UTF8;
byte[] bytes = def.GetBytes("朋友");
//For debug
//string debug = "";
//foreach(byte b in bytes)
// debug += b.ToString() + " ";
//Debug.WriteLine(debug); //That will display 197,243,211,209 as the same as the Dump value mentioned
string value = utf8.GetString(bytes);
//I also try, string value = utf8.GetString(Encoding.Convert(def,utf8,bytes))
string sql = String.Format("UPDATE T SET C='{0}' WHERE...",value);
//execute the sql...
После этого значение, хранимое в СУБД, неверно, и значение, и его дампрезультат.