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" >

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 [email protected] referenced in function _main

1>main.obj : error LNK2019: unresolved externalsymbol [email protected] referenced in function _main

1>main.obj : error LNK2019: unresolved externalsymbol [email protected] referenced in function _main

1>main.obj : error LNK2019: unresolved externalsymbol [email protected] referenced in function _main

1>main.obj : error LNK2019: unresolved externalsymbol [email protected] referenced in function _main

1>main.obj : error LNK2019: unresolved externalsymbol [email protected] referenced in function _main

1>main.obj : error LNK2019: unresolved externalsymbol [email protected] referenced in function _main

1>main.obj : error LNK2019: unresolved external [email protected] 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。

查看以上各编码的命令

  1. mysql> SHOW VARIABLES LIKE ‘character%‘;

就能够看到character_set_server、character_set_connection、character_set_results等的值。

主要是理解上述所说的mysql字符编码转换的步骤,这样就能控制不会出现乱码问题。

本文作者:csdn  iaccepted 凌风

时间: 2024-11-03 22:32:21

mysql的安装、C++訪问mysql数据库、编码设置问题的相关文章

mysql的安装、C++访问mysql数据库、编码设置问题

一.mysql的安装,这个相对简单,直接去官网下载mysql安装程序,就可以完成安装过程,网上有很多安装教程,这个没什么注意事项. 二.C++访问mysql,主要是用到mysql定义的头文件,内部定义了各种数据结构和函数,比如MYSQL,MYSQL_RES,MYSQL_ROW,mysql_real_connect等等一系列的结构和函数.这里要注意的就是将头文件及lib文件以及dll文件配置到当前开发环境来进行访问mysql数据库. 以最新的vs2013作为示例说一下配置过程.为了写的清晰点,在网

使用c#訪问Access数据库时,提示找不到可安装的 ISAM

使用c#訪问Access数据库时,提示找不到可安装的 ISAM.例如以下图: 代码例如以下: connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=db.mdb;Pwd=abcd;"; conn = new OleDbConnection(connectionString); conn.Open(); DataTable dt = conn.GetSchema("Tables"); if

Odoo(OpenERP)开发实践:通过XML-RPC接口訪问Odoo数据库

Odoo(OpenERP)server支持通过XML-RPC接口訪问.操作数据库,基于此可实现与其它系统的交互与集成. 本文是使用Java通过XMLRPC接口操作Odoo数据库的简单演示样例.本例引用的jar包包含xmlrpc-common-3.1.3.jar, xmlrpc-client-3.1.3.jar和ws-commons-util-1.0.2.jar.如须要,可点击这里下载. package memo.by.weichen; import java.net.URL; import ja

C语言訪问MySQL数据库的方法

1.加入头文件路径(MySQL安装路径中的include路径) 2.加入库文件(直接从MySQL安装路径中copy libmysql.lib就可以) 3.编程操作数据库 代码 // AccessToMySQL.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #include <mysql.h> #pragma comment(lib,"libmysql.lib"

yum 安装mysql, yum安装指定版本的mysql

yum安装mysql: 1. 查看有没有安装过 yum list installed MySQL* (有存在要卸载yum remove MySQL*) rpm -qa | grep mysql* 查看有没有安装包: yum list mysql* 2. 安装mysql客户端 yum -y install mysql 安装mysql 服务器端 yum -y install mysql-server  mysql-devel 3. 启动&&停止 数据库字符集设置 mysql配置文件/etc/m

转 mysql front安装与使用教程 mysql 工具

mysql front安装与使用教程 由 kaikai0220 创建,Alma 最后一次修改 2018-04-25 mysql front一款小巧的管理Mysql的应用工具,那么这个工具该如何安装和使用呢?一起来看看吧. 一.mysql front下载: mysql front下载地址:点击下载 二.mysql front安装 1.点击下载的MySQL-Front_Setup.exe程序,开始安装,出现以下界面: 2.点击"下一步",出现以下界面: 3.点击"浏览"

大数据量高并发訪问的数据库优化方法

????假设不能设计一个合理的数据库模型.不仅会添加client和server段程序的编程和维护的难度,并且将会影响系统实际运行的性能.所以,在一个系统開始实施之前,完备的数据库模型的设计是必须的. ????在一个系统分析.设计阶段.由于数据量较小.负荷较低.我们往往仅仅注意到功能的实现.而非常难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低.这时再来考虑提高系统性能则要花费很多其它的人力物力,而整个系统也不可避免的形成了一个打补丁project. ????所以在考

数据库编码设置的一个问题

安装数据库时,设置编码为utf8,但是在控制台插入一个数据时,无法插入含有中文的字段, 通过执行命令:show variables like 'character_set_%' 然后,2)在网上搜到一个版本说,通过命令:set names='gbk' 虽然,可以正常插入中文字段,但是,查询的时候,出现乱码 3)继续在网上搜索,另一个版本说,安装数据库时,不要设置为utf8,设置为gbk2312, 于是我通过更改配置,重新设置了数据库编码为gbk2312,接下来无论是查询还是插入,都可以正常显示了

mysql数据库编码设置成utf-8,避免出现乱码

设置默认编码为utf8:set names utf8;设置数据库db_name默认为utf8:ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;设置表tb_name默认编码为utf8:ALTER TABLE `tb_name`        DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;