社区
C++ 语言
帖子详情
sql,mysql。存入泰文问题,急,急,急!
yaowei5555
2008-04-10 05:04:07
请问如何在unicode环境下将泰文写入sql nvarchar类型字段?以及如何在mysql中存取unicode数据,,前几天将中文,韩文,日文等存入sql nvarchar类型字段问题已解决,但存入泰语时存入的却是?????号,望大虾们指教!
...全文
658
22
打赏
收藏
sql,mysql。存入泰文问题,急,急,急!
请问如何在unicode环境下将泰文写入sql nvarchar类型字段?以及如何在mysql中存取unicode数据,,前几天将中文,韩文,日文等存入sql nvarchar类型字段问题已解决,但存入泰语时存入的却是?????号,望大虾们指教!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yaowei5555
2008-04-12
打赏
举报
回复
先在那上面划红线的部门去掉,继承cdatabase类,构筑一个新的类,void CDatabaseEx::ExecuteSQLW(LPWSTR lpszSQL)
{
RETCODE nRetCode;
HSTMT hstmt;
ASSERT_VALID(this);
ASSERT(AfxIsValidString(lpszSQL));
AFX_SQL_SYNC(::SQLAllocStmt(m_hdbc, &hstmt));
if (!CheckHstmt(nRetCode, hstmt))
AfxThrowDBException(nRetCode, this, hstmt);
TRY
{
OnSetOptions(hstmt);
// Give derived CDatabase classes option to use parameters
BindParameters(hstmt);
AFX_ODBC_CALL(::SQLExecDirectW(hstmt,lpszSQL, SQL_NTS));
if (!CheckHstmt(nRetCode, hstmt))
AfxThrowDBException(nRetCode, this, hstmt);
else
{
do
{
SWORD nResultColumns;
AFX_ODBC_CALL(::SQLNumResultCols(hstmt, &nResultColumns));
if (nResultColumns != 0)
{
do
{
AFX_ODBC_CALL(::SQLFetch(hstmt));
} while (CheckHstmt(nRetCode, hstmt) &&
nRetCode != SQL_NO_DATA_FOUND);
}
AFX_ODBC_CALL(::SQLMoreResults(hstmt));
} while (CheckHstmt(nRetCode, hstmt) &&
nRetCode != SQL_NO_DATA_FOUND);
}
}
CATCH_ALL(e)
{
::SQLCancel(hstmt);
AFX_SQL_SYNC(::SQLFreeStmt(hstmt, SQL_DROP));
THROW_LAST();
}
END_CATCH_ALL
AFX_SQL_SYNC(::SQLFreeStmt(hstmt, SQL_DROP));
}
才你正常写入
yaowei5555
2008-04-11
打赏
举报
回复
void CDatabase::ExecuteSQL(LPCWSTR lpszSQL)
{
USES_CONVERSION;
RETCODE nRetCode;
HSTMT hstmt;
ASSERT_VALID(this);
ASSERT(AfxIsValidString(lpszSQL));
AFX_SQL_SYNC(::SQLAllocStmt(m_hdbc, &hstmt));
if (!CheckHstmt(nRetCode, hstmt))
AfxThrowDBException(nRetCode, this, hstmt);
TRY
{
OnSetOptions(hstmt);
// Give derived CDatabase classes option to use parameters
BindParameters(hstmt);
AFX_ODBC_CALL(::SQLExecDirect(hstmt,
(UCHAR*)T2A((LPTSTR)lpszSQL), SQL_NTS));
if (!CheckHstmt(nRetCode, hstmt))
AfxThrowDBException(nRetCode, this, hstmt);
else
{
do
{
SWORD nResultColumns;
AFX_ODBC_CALL(::SQLNumResultCols(hstmt, &nResultColumns));
if (nResultColumns != 0)
{
do
{
AFX_ODBC_CALL(::SQLFetch(hstmt));
} while (CheckHstmt(nRetCode, hstmt) &&
nRetCode != SQL_NO_DATA_FOUND);
}
AFX_ODBC_CALL(::SQLMoreResults(hstmt));
} while (CheckHstmt(nRetCode, hstmt) &&
nRetCode != SQL_NO_DATA_FOUND);
}
}
CATCH_ALL(e)
{
::SQLCancel(hstmt);
AFX_SQL_SYNC(::SQLFreeStmt(hstmt, SQL_DROP));
THROW_LAST();
}
END_CATCH_ALL
AFX_SQL_SYNC(::SQLFreeStmt(hstmt, SQL_DROP));
}
// Shutdown pending query for CDatabase's private m_hstmt
void CDatabase::Cancel()
{
ASSERT_VALID(this);
ASSERT(m_hdbc != SQL_NULL_HDBC);
::SQLCancel(m_hstmt);
}
上面那个是这个函数里面用到的,我按你的改了好像也没用啊
Supper_Jerry
2008-04-11
打赏
举报
回复
(UCHAR*)T2A((LPTSTR)lpszSQL), SQL_NTS))错了
(wchar *)T2A((
LPCWTR
)lpszSQL), SQL_NTS))试一下
Supper_Jerry
2008-04-11
打赏
举报
回复
(UCHAR*)T2A((LPTSTR)lpszSQL), SQL_NTS))?这是要做什么?
用(wchar *)T2A((LPTWTR)lpszSQL), SQL_NTS))试一下。
SQL_NTS告诉函数计算0结尾的字符串长度,你的那句话给截断了。
yaowei5555
2008-04-11
打赏
举报
回复
在查询分析器里面执行插入泰文的语句可以正常得到泰文啊,应该说明和sql没有多大的关系,是不是在格式化和执行插入的时候写错了,或者还应该做什么转换才行
yaowei5555
2008-04-11
打赏
举报
回复
MessageBox(str,_T("显示"),MB_OK); 能够正常显示泰文,为什么插入到数据库就不行了了,是不是在执行db.ExecuteSQL()函数调用了 (UCHAR*)T2A((LPTSTR)lpszSQL), SQL_NTS))把unicode换成了ANSI???
yaowei5555
2008-04-11
打赏
举报
回复
哦,请问如何查看strSQL是否争取??
Supper_Jerry
2008-04-11
打赏
举报
回复
http://www.dezai.cn/life_Show.asp?ArticleID=22106&ArticlePage=1 看这篇文章能不能帮上你
Supper_Jerry
2008-04-11
打赏
举报
回复
[Quote=引用 9 楼 yaowei5555 的回复:]
明哥可否留下联系方式QQ或邮箱,在这里等你太慢了,多谢了,这个问题困扰太久了,上次可以输入中,日,韩还以为搞定了,就结贴了,结果碰到泰文又不行了
[/Quote]
别等我,呵呵。我只是给你建议而已。具体问题所在我也不清楚,只是你应当排除所以可能潜在的引起错误的因素,才能找出真正
问题所在。你按照8楼修改一下,看看strSQL是否正确 ,db.ExecuteSQL(bstrSQL); 是否成功。
ps:我在上班,偶尔上来看看。公司无法上邮箱qq。抱歉。祝你早日解决
yaowei5555
2008-04-11
打赏
举报
回复
明哥可否留下联系方式QQ或邮箱,在这里等你太慢了,多谢了,这个问题困扰太久了,上次可以输入中,日,韩还以为搞定了,就结贴了,结果碰到泰文又不行了
Supper_Jerry
2008-04-11
打赏
举报
回复
[Quote=引用 6 楼 yaowei5555 的回复:]
sql版本是2000的,但的查询分析器里执行代码可显示泰文,我是把一个Cstring 类型写入
CString str(Buffer);
MessageBox(str,_T("显示"),MB_OK);
try
{
CDatabase db;
if(db.OpenEx((_T("dsn=s8200;uid=root;pwd=root"))))
{
CString strSQL=L"";
strSQL.Format(_T("INSERT INTO a_factory VALUES(10,'EV8000',1,'湖北宜昌','%s','张sir')"), str);
_bstr_t bstrSQL(strSQL);
db.ExecuteSQL(bstrSQL);
…
[/Quote]
不要用_T全部用L包括''
strSQL.Format(_T("INSERT INTO a_factory VALUES(10,'EV8000',1,'湖北宜昌','%s','张sir')"), str);
之后输出一下strSQL看看结果是否正确
执行db.ExecuteSQL(bstrSQL); 的时候
try catch看是否成功
yaowei5555
2008-04-11
打赏
举报
回复
Why no man tell me????
yaowei5555
2008-04-11
打赏
举报
回复
sql版本是2000的,但的查询分析器里执行代码可显示泰文,我是把一个Cstring 类型写入
CString str(Buffer);
MessageBox(str,_T("显示"),MB_OK);
try
{
CDatabase db;
if(db.OpenEx((_T("dsn=s8200;uid=root;pwd=root"))))
{
CString strSQL=L"";
strSQL.Format(_T("INSERT INTO a_factory VALUES(10,'EV8000',1,'湖北宜昌','%s','张sir')"), str);
_bstr_t bstrSQL(strSQL);
db.ExecuteSQL(bstrSQL);
}
messagebox中能够显示泰文,是不是格式化的时候搞错了?我是在vc 设置unicode环境下进行写入数据库的,好像后来mfc里有个自动函数又将unicode该为了ansi了,所以存入的是????,望高人们指点啊
Supper_Jerry
2008-04-11
打赏
举报
回复
SQLExecDirect返回值正确吗?
日语,韩语,用相同的方法都能成功吗?
只有泰语不可以?
yaowei5555
2008-04-11
打赏
举报
回复
红色的部门我改成你所说的那样也不行啊,
Supper_Jerry
2008-04-11
打赏
举报
回复
AFX_ODBC_CALL(::SQLExecDirect(hstmt,
(
UCHAR*)T2A((LPTSTR)lpszSQL), SQL_NTS));
红色部分你改成什么了?
SQLExecDirect看返回值。仔细分析一下。
yaowei5555
2008-04-11
打赏
举报
回复
怎么没有人解答啊??
ryfdizuo
2008-04-10
打赏
举报
回复
google找找看吧。
星羽
2008-04-10
打赏
举报
回复
http://bbs.chinaunix.net/thread-977950-1-1.html
Supper_Jerry
2008-04-10
打赏
举报
回复
sql 那个版本?2005支持的。
加载更多回复(2)
泰文
TTF
泰文
TTF
WIN XP
泰文
输入法安装包
泰文
泰语 输入法 安装 386 我在网吧上网要打
泰文
,可是网吧输入法仓库里没
泰文
的 如果重新启动就被还原了,有没有
泰文
直接输入的软件
泰文
英文字符输入
在项目过程中遇到界面输入
泰文
字符,没有键盘。于是自己描画了一个
泰文
字符键盘。功能满足界面文本输入框等的字符输入,希望能给大家提供一点帮助。
泰文
语言编码说明
泰文
语言编码说明,
泰文
语言编码与其实现的发展。
泰文
的组字规则和显示规则
详细介绍了
泰文
的组字规则和显示规则,对在单片机和arm上需要以点阵方式显示
泰文
的很有用处
C++ 语言
64,683
社区成员
250,491
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章