使用mysql++链接数据库的使用与bug

本文详细介绍了如何在Ubuntu系统中安装和配置MySQL,包括设置root密码、允许远程连接以及修改字符集。此外,还讲解了安装mysql++库的步骤,并提供了测试示例代码。最后,针对C++程序链接数据库时可能出现的中文乱码问题,给出了解决方案,即在查询前设置SET NAMES 'utf8'。
摘要由CSDN通过智能技术生成

一.Ubuntu中MySQL的安装与配置

1.安装
sudo apt install -y mysql-server mysql-client libmysqlclient-dev

cat /etc/mysql/debian.cnf # 获取密码
mysql -udebian-sys-maint -p # 输入上面现实的密码

use mysql;

alter user "root"@"localhost" identified with mysql_native_password by "新密码"; # 设置root密码
flush privileges;

update user set host='%' where user='root'; # 设置远程链接
flush privileges;

exit # 退出mysql

sudo gedit  /etc/mysql/mysql.conf.d/mysqld.cnf # 打开配置文件修改配置

bind-address        = 0.0.0.0 # 修改,可以远程链接

# 可选项 可以默认
[mysqld]
#
# * Basic Settings
#
max_allowed_packet = 1024M
sql_mode =STRICT_TRANS_TABLES

# 重启
service mysql restart
2.修改配置
#使用下面命令进入mysql模式
mysql -u root -p 
# 查看MySQL编码
SHOW VARIABLES LIKE 'char%'
#退出
exit
#在终端中输入 
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
#打开mysqld.cnf 文件,在lc-messages-dir = /usr/share/mysql 语句后添加 
character-set-server=utf8 
#语句

image-20220210193759253

#在终端输入
sudo gedit /etc/mysql/conf.d/mysql.cnf 
#命令打开mysql.cnf配置文件,
#如图添加代码:
default-character-set=utf8 

image-20220210195336004

#使用 service 启动:
service mysql restart

二、安装mysql++

1.安装
wget https://tangentsoft.com/mysqlpp/releases/mysql++-3.2.5.tar.gz
tar -zxvf ./mysql++-3.2.5.tar.gz
cd  mysql++-3.2.5
./configure
make
make install
2.测试
#include <iostream>
#include <mysql++/mysql++.h>
int main() {
    const char* db = nullptr, *server = nullptr, *user = nullptr, *password = "";
    db = "test";
    server = "localhost";
    user = "root";
    password = "*****";
    mysqlpp::Connection conn(false);
    if (conn.connect(db, server, user, password)){
        std::cout << "connect db succeed. " <<std::endl;
        mysqlpp::Query query = conn.query("INSERT INTO `mydb`.`deviceTypeTb` (`deviceTypeId`, `deviceTypeName`) VALUES (1,'芯片');")
    }
    return 0;
}
3.API

API的详细介绍及使用Demo
http://tangentsoft.net/mysql++/doc/html/userman/

MySql++支持三种查询: Query::execute(), Query::store(), Query::use()

  1. execute( )接口
    用于不返回数据的查询,该函数返回一个SimpleResult对象。
  2. exec( )接口
    它返回一个bool值,标示执行成功与否;如果只要成功与否的标识,可以使用该接口。
  3. store() 接口
    用于用服务器获取数据,该函数返回一个StoreQueryResult对象。对象包含了整个查询结果,使用stl::map方式从里面取数据即可。
  4. use()接口
    同样用于从服务器获取数据,不过该函数返回UseQueryResult对象。相比store()而言更节省内存,该对象类似StoreQueryResult,但是不提供随机访问的特性。use查询会让服务器一次返回结果集的一行。
    Query对象的errnum()返回上次执行对应的错误代码,error()返回错误信息,affected_rows()返回受影响的行数。

三.BUG及解决

在修改mysql编码后在Navicat运行sql语句可以支持中文,

但是通过c++的程序链接数据库和中文乱码,找了好久好久的教程

终于可以

设置了表的mysql默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:
SET NAMES ‘utf8’;
它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
#来自https://blog.csdn.net/savrina_/article/details/106295231

转载http://101.42.233.33/wht/14.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值