一.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
#语句
#在终端输入
sudo gedit /etc/mysql/conf.d/mysql.cnf
#命令打开mysql.cnf配置文件,
#如图添加代码:
default-character-set=utf8
#使用 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()
- execute( )接口
用于不返回数据的查询,该函数返回一个SimpleResult对象。 - exec( )接口
它返回一个bool值,标示执行成功与否;如果只要成功与否的标识,可以使用该接口。 - store() 接口
用于用服务器获取数据,该函数返回一个StoreQueryResult对象。对象包含了整个查询结果,使用stl::map方式从里面取数据即可。 - 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