c+上第64位之后的随机字符+;mysql 当我通过C++应用程序与mysql数据库交互时,我面临着一个非常奇怪的问题。
环境: docker-compose.ymlc+上第64位之后的随机字符+;mysql 当我通过C++应用程序与mysql数据库交互时,我面临着一个非常奇怪的问题。,c++,mysql,docker,docker-compose,C++,Mysql,Docker,Docker Compose,环境: docker-compose.yml version: '3.1' services: db: image: mysql:8.0.21 #libmysqlcppconn8-2_8.0.21-1ubuntu18.04_amd64.deb connector command: --default-authentication-plugin=mysql_native_password restart: always en
version: '3.1'
services:
db:
image: mysql:8.0.21 #libmysqlcppconn8-2_8.0.21-1ubuntu18.04_amd64.deb connector
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
security_opt:
- seccomp:unconfined
client:
build: .
ports:
- "2890:2890"
客户端容器是ubuntu18.04,这里是测试连接的简单代码和最小结果:
#include <cstdio>
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include "mysql_connection.h"
#include <array>
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/prepared_statement.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
int main() {
sql::Driver *driver = get_driver_instance();
sql::Connection *con =
driver->connect("tcp://remote_backup_db_1", "root", "example");
con->setSchema("db_test");
sql::PreparedStatement *stmt;
sql::ResultSet *res;
stmt = con->prepareStatement("SELECT test from t;");
res = stmt->executeQuery();
if (res->rowsCount() > 0) {
if (res->next()) {
std::string text = res->getString("test");
std::clog << "text: " << text << "\n";
}
}
return 0;
}
问题:当我尝试检索小于64字节的文本时,一切正常,但当我尝试执行文本大于64字节的相同代码时,它会检索开头的64字节,后跟随机字符。这个问题似乎与列类型无关(例如,blob也有同样的问题)。它似乎与编码有关,因为当我尝试获取结果长度时,它被正确设置(例如,对于70个字符的文本长度,它给了我70个字符)
我已经尝试更改表编码,但我不知道如何解决这个问题。(PS,我基本上不使用奇怪的字符,只是ASCII)。< /P>你如何把文本放在表中?@ USE25751在MySQL控制台(手写)中提供的例子中,通过C++代码在应用程序中使用。两个程序相同的问题,你是否使用了一个不同的工具来检查数据库的内容,并确定数据库中的数据是否正确存储?@ USER881301是的,我在MySQL控制台上手工编写了一个简单的选择,在插入和C++插入之后,在这两种情况下,存储在DB中的内容与我插入的内容相同。
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| test | varchar(128) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+