我使用以下代码成功地设置了一个简单的PostgreSQL
数据库,并且可以SELECT
按print
预期设置行:
// PG
$hostname = 'localhost';
$dbName = 'pg_test_db';
$username = 'postgres';
$password = 'admin';
$pdo = new PDO("pgsql:host=$hostname;dbname=$dbName", $username, $password);
echo '<pre>';
$stmt = $pdo->prepare("SELECT * FROM test_table");
try {
$stmt->execute(array());
while ($row = $stmt->fetch()) {
print_r($row);
}
} catch(PDOException $e) {
echo $e;
}
当我尝试QuestDB
使用以下代码对我的测试表执行相同操作时,就会出现我的问题:
// QDB
$dbName = 'qdb';
$hostname = '127.0.0.1';
$password = 'quest';
$port = 8812;
$username = 'admin';
$pdo = new PDO("pgsql:host=$hostname;dbname=$dbName;port=$port", $username, $password);
echo '<pre>';
$stmt = $pdo->prepare("SELECT * FROM test_table");
try {
$stmt->execute(array());
while ($row = $stmt->fetch()) {
print_r($row);
}
} catch(PDOException $e) {
echo $e;
}
哪个返回错误数据,包括 1) 错误值;2) 不可读的字符;3)正确的字符串:
Array
(
[personnel_id] => 0 // this is bugged, it should be returning a value of 1...
[0] => 0
[ts] => IXO�` // timestamp is bugged
[1] => IXO�`
[date] => ������X // date is bugged
[2] => ������X
[name] => test_string // this string works fine...
[3] => test_string
[value] => 0
[4] => 0
)
非常奇怪的错误——我没有任何编码问题,plainPostgreSQL
或我预先存在的MySQL
表(我正在尝试将一些表切换到QuestDB
)。
编辑:如果我从更改SELECT *
为SELECT <single_column>
喜欢SELECT date FROM test_table
,它工作正常......但如果我在查询中添加更多列,那么字符编码错误会返回。
QuestDB 6.0.2
和PHP 8.0.2
这个错误也发生在预装的telemetry
表格中,所以我认为它与我创建表格的方式无关。