首先不得不说,接手别人的代码是一件非常GG的事情,比赛时间也将近了,对此不能进行大改...
自己挖的坑,土不够就自己上!!!
SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={MySQL ODBC 5.1 DRIVER};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=test;CharSet=gbk;";SQLCHAR ConnStrOut[MAXBUFLEN];
SQLWCHAR是UNICODE模式的双字节字符。
这时候你在VS2013上跑,然后就是一堆error C2664
首先确认工程是否为UNICODE模式,如果是,使用WCHAR之类的双字节字符声明字符串数组或指针(具体看编程环境,各个编程环境定义不一样)。
虽然这玩意在VS2013环境中,不建议使用这个SQL连接代码,这是ODBC的数据库连接方式,二十年前已经被淘汰的。 建议百度"VC ado 连接数据库"获取更多信息。
奈何这个人家2013年写的代码,也只给维护,所以...
正题:只需要
-
通常vs项目属性(在项目属性->设定->通用->字符集)设置字符集:
- 未设置。VS2008默认ansi编码,VS2010默认字符集是Unicode。
- Unicode编码。
- 多字节编码。
注意:只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用。
Win字符集
- 所谓的「ANSI」指的是对应当前系统 locale 的遗留(legacy)编码。Windows 里说的「ANSI」其实是 Windows code pages,这个模式根据当前 locale 选定具体的编码,比如简中 locale 下是 GBK。把自己这些 code page 称作「ANSI」是 Windows 的臭毛病。在 ASCII 范围内它们应该是和 ASCII 一致的。
- 所谓的「Unicode」指的是带有 BOM 的小端序 UTF-16。把带有 BOM 的小端序 UTF-16 称作「Unicode」也是 Windows 的臭毛病。Windows 从 Windows 2000 开始就已经支持 surrogate pair 了,所以已经是 UTF-16 了,「UCS-2」这个说法已经不合适了。UCS-2 只能编码 BMP 范围内的字符,从 1996 年起就在 Unicode/ISO 标准中被 UTF-16 取代了(UTF-16 通过蛋疼的 surrogate pair 来编码超出 BMP 的字符)。
- 把带 BOM 的 UTF-8 称作「UTF-8」又是 Windows 的臭毛病。如果忽略 BOM,那么在 ASCII 范围内与 ASCII 一致。另请参见:「带 BOM 的 UTF-8」和「无 BOM 的 UTF-8」有什么区别?
化用kasagawa 的笔记 2333