ホームページ データベース mysql チュートリアル mysql的安装、C++访问mysql数据库、编码设置问题_MySQL

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

Jun 01, 2016 pm 01:08 PM

一.mysql的安装,这个相对简单,直接去官网下载mysql安装程序,就可以完成安装过程,网上有很多安装教程,这个没什么注意事项。

 

二、C++访问mysql,主要是用到mysql定义的头文件,内部定义了各种数据结构和函数,比如MYSQL,MYSQL_RES,MYSQL_ROW,mysql_real_connect等等一系列的结构和函数。这里要注意的就是将头文件及lib文件以及dll文件配置到当前开发环境来进行访问mysql数据库。

以最新的vs2013作为示例说一下配置过程。为了写的清晰点,在网上找了几张图来说明。

 

1.要指定mysql所用到的头文件,可以直接将mysql安装目录下的include文件下的头文件拷贝到vs安装目录的include目录下,但是一般我们都是为编译器指定一个额外的头文件目录即可。右键工程-> 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文件而已。



 

ok,到这里环境就配置完成,接下来就可以进行连接mysql并进行数据库操作。

本文作者:csdn  iaccepted 凌风


 

在vs2013中新建一个工程,然后根据mysql的官方API就可以完成数据库操作。

如下:

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. #include "person.h"  
  2. #include   
  3. #include   
  4. #include   
  5. #include   
  6. #include   
  7.   
  8.   
  9. using namespace std;  
  10.   
  11. int main(){  
  12.     MYSQL *con;  
  13.     MYSQL_RES *results;  
  14.     MYSQL_ROW record;  
  15.   
  16.     char dbuser[30] = "root";  
  17.     char dbpasswd[30] = "123456";  
  18.     char dbhost[30] = "localhost";  
  19.     char dbname[30] = "person";  
  20.     char tname[30] = "person";  
  21.     char *query = nullptr;  
  22.   
  23.     con = mysql_init(nullptr);  
  24.   
  25.     if (!mysql_real_connect(con, dbhost, dbuser, dbpasswd, dbname, 3306, NULL, 0)){  
  26.         cerr "Failed to connect database" 
  27.         exit(2);  
  28.     }  
  29.   
  30.   
  31.     mysql_set_character_set(con, "gbk");  
  32.       
  33.     mysql_query(con, "insert into person(id, name) values('370983198811256977', '个')");  
  34.   
  35.     mysql_query(con, "select name,id from person where id = '370983198811256977'");  
  36.   
  37.     results = mysql_store_result(con);  
  38.   
  39.     cout 
  40.   
  41.     while ((record = mysql_fetch_row(results))){  
  42.         cout 
  43.     }  
  44.       
  45.     mysql_close(con);  
  46.     return 0;   
  47. }  
#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系统,但是建立工程建立的却是32位的工程。这是后同上面一样,工程(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格式,然后在在客户端进行操作,当有中文操作时,我们先更改客户端的编码比如改为gbk,然后进行插入读取,这时候mysql在接受到数据时发现是gbk编码的,如上会将gbk编码转换成character_set_server编码的数据进行存入,在这里也就是将gbk转换为utf8。读取的时候mysql会自动将读取的结果从内部字符集转换为character_set_results指定的编码,即从uft8转换为gbk从而不会产生编码问题。

以上转换为自动进行的过程,程序员要做的只是设置好内部编码格式以及客户端编码格式即可,这里的客户端是广义的,既可以指command lineclint 也可以只应用程序,说白了就是任何要访问mysql的东西统称为客户端,如上面例子中的代码,C++程序作为客户端时,因为要操作中文,所以首先使用

mysql_set_character_set(con,"gbk");

将客户端编码设置为gbk,这样存入的中文mysql会进行转换而成为utf8格式,读取的时候mysql又会从utf8格式转换成gbk返回给客户端。

 

查看以上各编码的命令

 

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

就可以看到character_set_server、character_set_connection、character_set_results等的值。


 

 

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQLの役割:Webアプリケーションのデータベース MySQLの役割:Webアプリケーションのデータベース Apr 17, 2025 am 12:23 AM

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

Innodb Redoログの役割を説明し、ログを元に戻します。 Innodb Redoログの役割を説明し、ログを元に戻します。 Apr 15, 2025 am 12:16 AM

INNODBは、レドログと非論的なものを使用して、データの一貫性と信頼性を確保しています。 1.レドログは、クラッシュの回復とトランザクションの持続性を確保するために、データページの変更を記録します。 2.Undologsは、元のデータ値を記録し、トランザクションロールバックとMVCCをサポートします。

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLの場所:データベースとプログラミング MySQLの場所:データベースとプログラミング Apr 13, 2025 am 12:18 AM

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

MySQL対その他のプログラミング言語:比較 MySQL対その他のプログラミング言語:比較 Apr 19, 2025 am 12:22 AM

他のプログラミング言語と比較して、MySQLは主にデータの保存と管理に使用されますが、Python、Java、Cなどの他の言語は論理処理とアプリケーション開発に使用されます。 MySQLは、データ管理のニーズに適した高性能、スケーラビリティ、およびクロスプラットフォームサポートで知られていますが、他の言語は、データ分析、エンタープライズアプリケーション、システムプログラミングなどのそれぞれの分野で利点があります。

MySQL:中小企業から大企業まで MySQL:中小企業から大企業まで Apr 13, 2025 am 12:17 AM

MySQLは、中小企業に適しています。 1)中小企業は、顧客情報の保存など、基本的なデータ管理にMySQLを使用できます。 2)大企業はMySQLを使用して、大規模なデータと複雑なビジネスロジックを処理して、クエリのパフォーマンスとトランザクション処理を最適化できます。

MySQL Index Cardinalityはクエリパフォーマンスにどのように影響しますか? MySQL Index Cardinalityはクエリパフォーマンスにどのように影響しますか? Apr 14, 2025 am 12:18 AM

MySQLインデックスのカーディナリティは、クエリパフォーマンスに大きな影響を及ぼします。1。高いカーディナリティインデックスは、データ範囲をより効果的に狭め、クエリ効率を向上させることができます。 2。低カーディナリティインデックスは、完全なテーブルスキャンにつながり、クエリのパフォーマンスを削減する可能性があります。 3。ジョイントインデックスでは、クエリを最適化するために、高いカーディナリティシーケンスを前に配置する必要があります。

See all articles