在linux下向oracle数据库中存中文字符的问题

oracle服务器装在windows下,我用select * V$NLS_PARAMETERS;查看服务器端的字符集为SIMPLIFIED

CHINESE_CHINA ZHS16GBK,
于是我在linux下的.bash profile文件中加了 NLS_LANG = "SIMPLIFIED CHINESE_CHINA.ZHS16GBK" export

NLS_LANG ,
这样我在QT程序中用
char sqlstr[64];
sprintf(sqlstr,"update user set name='%s' where id =1",Edit_name->text().toUtf8().data());
这样中文字符不能正常加入到数据库中。
我打印SQL也正常:update user set name='杨某某' where id =1
而且有时一旦运行SQL出错,获取的SQL错误信息也打印不出来。
我直接写SQL语句sprintf(sqlstr,"update user set name='杨某某' where id =1") 这样可以正常添加中文字符到

数据库中。

于我将.bash profile中的NLS_LANG重新设为NLS_LANG = "AMERICAN_AMERICA.ZHS16GBK" export NLS_LANG
这样我用sprintf(sqlstr,"update user set name='%s' where id =1",Edit_name->text().toUtf8().data());的语

句也不能正常添加,但返回的错误信息可以显示出来说是:quoted string not property terminated,
我直接写SQL语句sprintf(sqlstr,"update uesr set name='杨某某' where id =1") 这样可以正常添加中文字符到

数据库中。


倒底是何原因呢?