1. 程式人生 > >mysql的安裝、C++訪問mysql資料庫、編碼設定問題

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目錄下,但是一般我們都是為編譯器指定一個額外的標頭檔案目錄即可。右鍵工程-> 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就可以完成資料庫操作。

如下:

#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系統,但是建立工程建立的卻是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字元編碼轉換的步驟,這樣就能控制不會出現亂碼問題。

本文作者:csdn  iaccepted 凌風

相關推薦

mysql安裝C++訪問mysql資料庫編碼設定問題

一.mysql的安裝,這個相對簡單,直接去官網下載mysql安裝程式,就可以完成安裝過程,網上有很多安裝教程,這個沒什麼注意事項。 二、C++訪問mysql,主要是用到mysql定義的標頭檔案,內部定義了各種資料結構和函式,比如MYSQL,MYSQL_RES,MYSQL_

mysql安裝C++訪問mysql數據庫編碼設置問題

mon form 網上 無法找到 沒有 avi osi jsb 註意 一.mysql的安裝。這個相對簡單,直接去官網下載mysql安裝程序。就能夠完畢安裝過程,網上有非常多安裝教程,這個沒什麽註意事項。 二、C++訪問mysql。主要是用到m

MySQL新增新使用者為使用者建立資料庫為新使用者分配許可權

登入MySQL [[email protected]_0_2_33_centos /]#mysql -u root -p 新增新使用者 允許本地 IP 訪問 localhost, 127.0.0.1 mysql>create user 'test'@'localhost' iden

Mysql的基本使用(登陸&退出建立&刪除&選擇資料庫基本資料型別建立&刪除表格等)

登入mysql資料庫 mysql -h hostname -u username -p 如何hostname是本機的話,要替換為127.0.0.1或者是localhost 例子:mysql -h localhost -uroot -p 這樣輸完之後會換行讓你輸密碼,我

C#訪問MySQL資料庫(winform+EF)

以前都是C#連線SQLServer,現在MySQL也比較火了,而且是開源跨平臺的,這裡連線使用一下,主要是體會一下整個流程,這裡使用的是winform 訪問MYSQL,當然使用winfrom,還是wfp,以及其他的技術這裡不討論,個人覺得這個比較上手快。 1、安裝MYSQ

C#訪問MySQL資料庫幫助類

轉載地址:http://www.cnblogs.com/JiYF/p/6572614.html MySQL資料庫訪問幫助類 1.專案新增引用官方MySQL動態庫MySql.Data.dll 專案新增引用 2.web.config配置資料庫連線字串 <?x

VS2015 C#訪問MySQL資料庫

VS2015 C#連線MySQL 一、工具安裝; 安裝 MySQL For Windows,這個不多說,上官網下載; 安裝mysql-connector-net,這個是MySQL

MySQL安裝成功之後啟動錯誤 353428000和簡單使用

MySQL下載地址: http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.16-winx64.zip 配置環境變數: 我的解壓地址為: E:\develop_utils\mysq

Mysql新增使用者,訪問指定資料庫

1、使用root登入資料庫 mysql -uroot -p123456; 2、建立新使用者 create user 'admin'@'%' identified by 'Test123?'; 注: '%' - 所有情況都能訪問 ‘localhost’ - 本機才能訪問 ’111.

Ubuntu16.04中安裝SqlServer並建立連線資料庫跨平臺遷移教程連結各種程式語言連線資料庫的教程連結

安裝SQL server 1、匯入公鑰 wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - 2、註冊mssqlserver Ubuntu儲存庫 sudo

騰訊雲 Ubuntu 安裝並遠端訪問 MySQL

道理都懂,但還是連不上的話你就應該來看看... Info:Ubuntu Server 14.04.01 LTS 64 位 DataGrip 2016.2 前言 為了完成作業,不讓伺服器閒置,決定把資料庫放在遠端。免去本地配置的麻煩,這次的配置是基於騰訊的學生雲,系統選擇的是 Ubuntu Server 14.

mysql安裝之後,自帶的資料庫瞭解

mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || p

關於C++C#實現EXCEL資料庫批量匯入資料庫萬行以上資料效率問題

      最近開發一個數據展示、處理的一個管理類網站,開始沒有考慮資料量問題,測試才發現,當excel資料匯入資料庫的時候,隨著資料量的增加,越來越慢。慢的難易理解。       通過網上查詢發現事務在資料庫中是一個重要的概念,使用事務可以保證資料的統一和完整性。同時也

C++訪問MySQL

1.安裝mysql   sudo apt-get install mysql-server mysql-client 安裝過程中會提示設定使用者名稱和密碼 2.啟動mysql   sudo /etc/init.d/mysql restart 3.安裝C++開發庫   sud

VMware 安裝 Windows無法訪問指定裝置路徑或檔案。你可能沒有適當的許可權訪問該專案 拒絕訪問

現象:VMware安裝或執行時,雙擊開啟無反應,以管理員身份執行出現“Windows無法訪問指定裝置、路徑或檔案。你可能沒有適當的許可權訪問該專案。”警告 解決: 在工作管理員中結束“CameraFixer MFC Application”,該程式會劫持VM開頭的.ex

16C#裏面breakcontinuegoto的使用

c#在C#裏面,也是有break、continue、goto這些關鍵詞可以使用的。break是用來跳出當前的循環的。舉個實例來說明問題:如下://從1顯示到10,當顯示到第6以後,就跳出循環,後面的不在顯示 int i=0; while(true)

mysql安裝配置 (單個mysql安裝

AD data datadir 設置 安裝配置 nbsp c盤 啟動 mda mysql安裝於 c盤因為有註冊文件 和註冊表 1.為了防止mysql數據表變大和sql日誌增加 改變C:\ProgramData\MySQL\MySQL Server 5.7\my.ini

訪問日誌不記錄靜態文件配置訪問日誌切割配置靜態元素過期時間

Linux訪問日誌不記錄指定類型的文件 一個網站會有很多元素,尤其是圖片、js、css等靜態的文件非常多,用戶每請求一個頁面就會訪問諸多的圖片、js等靜態元素,這些元素的請求都會被記錄在日誌中。如果一個站點訪問量很大,那麽訪問日誌文件增長會非常快,這不僅對於服務器的磁盤空間造成影響,更重要的是會影響磁盤的讀寫

JDBC(資料庫的驅動連線java程式操作資料庫事務隔離級別連線池等)

java操作資料庫的思想:連上資料庫,傳送sql語句。在連上資料庫之前,要先用程式啟動資料庫,因此,可以通過反射載入類驅動(com.jdbc.mysql.Driver)。通過驅動管理類的靜態方法傳遞資料庫的url來獲取一個連線物件(connection)。有三個過載的方法,第一個user和p

.NETC#和ASP.NETASP.NET MVC四者之間的區別

核心 框架類 二進制 的區別 net跨平臺 for 解釋 一個 net開發 什麽是.NET? .NET是微軟公司下的一個開發平臺,.NET核心就是.NET Framwork(.NET框架)是.NET程序開發和運行的環境,在這個平臺下可以用不同的語言進行開發,因為.NET是跨