mysql的安装、C++訪问mysql数据库、编码设置问题
一.mysql的安装。这个相对简单,直接去官网下载mysql安装程序。就能够完毕安装过程,网上有非常多安装教程,这个没什么注意事项。
二、C++訪问mysql。主要是用到mysql定义的头文件,内部定义了各种数据结构和函数,比方MYSQL,MYSQL_RES,MYSQL_ROW,mysql_real_connect等等一系列的结构和函数。这里要注意的就是将头文件及lib文件以及dll文件配置到当前开发环境来进行訪问mysql数据库。
以最新的vs2013作为演示样例说一下配置过程。
为了写的清晰点,在网上找了几张图来说明。
1.要指定mysql所用到的头文件。能够直接将mysql安装文件夹下的include文件下的头文件复制到vs安装文件夹的include文件夹下,可是一般我们都是为编译器指定一个额外的头文件文件夹就可以。右键project-> properties然后例如以下图,在这个附加包括文件夹(Additional Include Directory)加入上mysql的include文件,此文件在mysql安装文件夹下,比如本人的安装文件夹
C:\Program Files\MySQL\MySQL Server 5.1\include
2.指定mysql的库文件
在连接器的常规以下。附加库文件夹(Additional Liberay Directory)加入上mysql安装文件夹下的lib文件夹的路径,本人的安装文件夹:
C:\Program Files\MySQL\MySQL Server 5.5\lib
本文作者:csdn iaccepted 凌风
3.加入额外依赖(AdditionalDependencies),例如以下图。指定libmysql.lib,事实上就是在上面设置的库文件里指定用哪个lib文件而已。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSUFjY2VwdGVk/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
ok,到这里环境就配置完毕,接下来就能够进行连接mysql并进行数据库操作。
本文作者:csdn iaccepted 凌风
在vs2013中新建一个project,然后依据mysql的官方API就能够完毕数据库操作。
例如以下:
#include "person.h"
#include <Windows.h>
#include <iostream>
#include <string>
#include <mysql.h>
#include <winsock.h> using namespace std; int main(){
MYSQL *con;
MYSQL_RES *results;
MYSQL_ROW record; char dbuser[30] = "root";
char dbpasswd[30] = "123456";
char dbhost[30] = "localhost";
char dbname[30] = "person";
char tname[30] = "person";
char *query = nullptr; con = mysql_init(nullptr); if (!mysql_real_connect(con, dbhost, dbuser, dbpasswd, dbname, 3306, NULL, 0)){
cerr << "Failed to connect database" << endl;
exit(2);
} mysql_set_character_set(con, "gbk"); mysql_query(con, "insert into person(id, name) values('370983198811256977', '个')"); mysql_query(con, "select name,id from person where id = '370983198811256977'"); results = mysql_store_result(con); cout << mysql_num_fields(results) << endl; while ((record = mysql_fetch_row(results))){
cout << record[0] << endl;
} mysql_close(con);
return 0;
}
正常情况下编译并执行就能够了。
可是有的时候会提示
main.obj : error LNK2019: unresolved externalsymbol _mysql_num_fields@4 referenced in function _main
1>main.obj : error LNK2019: unresolved externalsymbol _mysql_set_character_set@8 referenced in function _main
1>main.obj : error LNK2019: unresolved externalsymbol _mysql_init@4 referenced in function _main
1>main.obj : error LNK2019: unresolved externalsymbol _mysql_real_connect@32 referenced in function _main
1>main.obj : error LNK2019: unresolved externalsymbol _mysql_query@8 referenced in function _main
1>main.obj : error LNK2019: unresolved externalsymbol _mysql_store_result@4 referenced in function _main
1>main.obj : error LNK2019: unresolved externalsymbol _mysql_fetch_row@4 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol_mysql_close@4 referenced in function _main
意思就是说这些符号都无法找到从而导致链接失败。
非常明显编译是正常的仅仅是链接失败。首先回去检查上面的三项设置是否对了,假设没有错误的话可能是与系统的版本号有关,比方说你用的是64为的windows系统,可是建立project建立的却是32位的project。
这是后同上面一样,project(project)右键->选项(properties)-> 在属性页(property pages)的最上面 有个平台选择(platform)然后选择x64,这样再回来编译就ok了。
本文作者:csdn iaccepted 凌风
三、中文乱码问题
查看mysql的用户手冊能发现,mysql进行字符编码转换的步骤非常明白:
1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;
2. 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,其确定方法例如以下:
• 使用每一个数据字段的CHARACTER SET设定值。
• 若上述值不存在,则使用相应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展。非SQL标准);
• 若上述值不存在。则使用相应数据库的DEFAULT CHARACTER SET设定值;
• 若上述值不存在,则使用character_set_server设定值。
3. 将操作结果从内部操作字符集转换为character_set_results。
普通情况下我们将mysql的默认编码设置为utf8格式。然后在在client进行操作。当有中文操作时。我们先更改client的编码比方改为gbk,然后进行插入读取,这时候mysql在接受到数据时发现是gbk编码的,如上会将gbk编码转换成character_set_server编码的数据进行存入。在这里也就是将gbk转换为utf8。读取的时候mysql会自己主动将读取的结果从内部字符集转换为character_set_results指定的编码,即从uft8转换为gbk从而不会产生编码问题。
以上转换为自己主动进行的过程,程序猿要做的仅仅是设置好内部编码格式以及client编码格式就可以,这里的client是广义的。既能够指command lineclint 也能够仅仅应用程序,说白了就是不论什么要訪问mysql的东西统称为client。如上面样例中的代码。C++程序作为client时,由于要操作中文,所以首先使用
mysql_set_character_set(con,"gbk");
将client编码设置为gbk,这样存入的中文mysql会进行转换而成为utf8格式。读取的时候mysql又会从utf8格式转换成gbk返回给client。
查看以上各编码的命令
- mysql> SHOW VARIABLES LIKE 'character%';
主要是理解上述所说的mysql字符编码转换的步骤,这样就能控制不会出现乱码问题。
本文作者:csdn iaccepted 凌风
mysql的安装、C++訪问mysql数据库、编码设置问题的更多相关文章
- PHP的MySQL扩展:PHP訪问MySQL的经常使用扩展函数
来源:http://www.ido321.com/1024.html 一.PHP连接数据库及基本操作 MySQL採用的是'客户机/server'架构.使用PHP安装的MySQL扩展函数,和直接使用cl ...
- php訪问mysql数据库
PHP訪问Mysql数据库 PHP能够通过mysql接口和mysqli接口訪问mysql数据库. 须要加入mysql和mysqli接口才干訪问mysql数据库. windows下配置amp: a.安装 ...
- PHP訪问MySql数据库 0基础篇
在站点后台,常常要与数据库打交道.本文介绍怎样使用XAMPP来管理MySql数据库及怎样用PHP来訪问MySql数据库. 一.使用XAMPP来管理MySql数据库 首先使用XAMPP打开MySql的管 ...
- 在nginx中使用lua直接訪问mysql和memcaced达到数据接口的统一
安装nginx參见<nginx+lua+redis构建高并发应用> 让nginx 中的nginx_lua_module支持mysql 和memcache 下载 https://github ...
- 使用c#訪问Access数据库时,提示找不到可安装的 ISAM
使用c#訪问Access数据库时,提示找不到可安装的 ISAM.例如以下图: 代码例如以下: connectionString = "Provider=Microsoft.Jet.OLEDB ...
- Odoo(OpenERP)开发实践:通过XML-RPC接口訪问Odoo数据库
Odoo(OpenERP)server支持通过XML-RPC接口訪问.操作数据库,基于此可实现与其它系统的交互与集成. 本文是使用Java通过XMLRPC接口操作Odoo数据库的简单演示样例.本例引用 ...
- C语言訪问MySQL数据库的方法
1.加入头文件路径(MySQL安装路径中的include路径) 2.加入库文件(直接从MySQL安装路径中copy libmysql.lib就可以) 3.编程操作数据库 代码 // AccessToM ...
- yum 安装mysql, yum安装指定版本的mysql
yum安装mysql: 1. 查看有没有安装过 yum list installed MySQL* (有存在要卸载yum remove MySQL*) rpm -qa | grep m ...
- 转 mysql front安装与使用教程 mysql 工具
mysql front安装与使用教程 由 kaikai0220 创建,Alma 最后一次修改 2018-04-25 mysql front一款小巧的管理Mysql的应用工具,那么这个工具该如何安装和使 ...
随机推荐
- c中#与##的应用思考
c中#与##的应用思考 原创 2014年02月25日 22:01:35 927 一. 思考出处 在读<<linux 0.12完全剖析>>初始化部分, init进程是通过fork ...
- jQuery实现当按下回车键时绑定点击事件
jQuery实现当按下回车键时绑定点击事件 <script> $(function(){ $(document).keydown(function(event){ if(event.key ...
- Phpstrom 书签应用
F11增加书签 书签 Ctrl + F11切换书签助记符 Ctrl +#[0-9]转到编号书签 Shift + F11显示书签
- ubuntu安装jdk<服务器>
服务器 阿里云服务器Ubuntu安装jdk7 2014-08-25 16:44 | coding云 | 5825次阅读 | 6条评论 一.下载jdk 可以先下载到本地,然后ftp到服务器 官方 ...
- 用js判断浏览器类型及设备
<!DOCTYPE html> <html> <head> <title>JS判断是什么设备是什么浏览器</title> <meta ...
- JS实现并集,交集和差集
var set1 = new Set([1,2,3]);var set2 = new Set([2,3,4]); 并集let union = new Set([...set1, ...set2]); ...
- 刷题总结——String painter(hdu2476)
题目: Problem Description There are two strings A and B with equal length. Both strings are made up of ...
- vim 翻页命令记录
vim命令: ctrl-f:往前翻一页(forward) ctrl-b:往后翻一页(backward) ctrl-d:往下翻半页(down) ctrl-u:往上翻半页(up)
- Python实现删除文件夹内规定时间内的文件
需求: 在测试程序的时候,程序会大批量的上传文件到规定目录,然后文件根据日期DAY新建文件夹存放,比如28号上传的文件放到 .../28/* 内,29号上传的文件放到 .../29/*内,因为需要 ...
- utilize HttpClient to generate a SSL access and generate REST access to fetch data, async programming? cool and brief
WebRequestHandler handler = new WebRequestHandler(); try { X509Certificate2 certificate = new X509Ce ...