使用PHP在Sqlite数据库中搜索汉字不匹配

使用PHP在Sqlite数据库中搜索汉字不匹配,php,pdo,sqlite,Php,Pdo,Sqlite,我在让PHP匹配SQLite数据库中的汉字查询时遇到了一些问题。在sqlite3中从命令提示符执行相同的搜索时会产生命中,但PHP没有显示任何结果 守则: $db = new PDO('sqlite:database.db'); $sql=$db->prepare("SELECT * FROM character WHERE character='安';"); $sql->execute(); $result=$sql->fetchAll(); print_r($result)

我在让PHP匹配SQLite数据库中的汉字查询时遇到了一些问题。在sqlite3中从命令提示符执行相同的搜索时会产生命中,但PHP没有显示任何结果

守则:

$db = new PDO('sqlite:database.db');
$sql=$db->prepare("SELECT * FROM character WHERE character='安';");
$sql->execute();
$result=$sql->fetchAll();
print_r($result);
这显示一个空数组。当我搜索任何其他字段(不是汉字)时,它将显示正确的结果

好笑的是,我将标题设置为utf-8、16、16BE、16LEjust flailing,但这没有起作用

字段的数据类型设置为nchar,但将其设置为text不会产生不同的结果。类似地,使用SQLite3而不是PDO也不会有任何改变


有什么想法吗?提前感谢您的帮助。

默认情况下,Windows控制台无法正确处理UTF-8输入/输出。 在控制台中输入或编辑的任何数据都是错误的编码


在运行sqlite3.exe之前,您可以尝试执行chcp 65001,但最好首先使用其他能够正确处理UTF-8的SQLite工具。

似乎没有简单的答案,但Windows控制台没有问题,因为数据库以相同的方式处理来自浏览器或控制台的所有输入。尽管有消息称sqlite可以使用utf-8,但它似乎可以在ucs-2中工作,我对这种编码一无所知。我通过解码ucs并将其编码为utf来验证这一点

简单的答案,也是我的答案,因为我无法将编码转换为jive,就是对进入数据库的查询使用base64_编码,对输出的信息进行解码。它并不优雅,但它允许utf字符进入非utf数据库


SELECT hex'的输出是什么安'; 在shell中以及在PHP中?@CL在shell中给出:88C0,在PHP中显示:hex'螳'.当你从PHP执行它的时候?哪个操作系统?啊,我明白了。PHP给出了“E5AE89”。[十六进制'螳'] => E5AE89是整行。其中产生的字符与原始输入不同:安. 我使用的是Windows 7。谢谢!这是一个非常不方便的功能。我只是尝试了一些方法,但是注意到,如果我在PHPa非汉字字段中搜索另一个字段,它将正确显示命令提示符输入的数据,但是如果我通过PHP添加信息,然后以相同的方式搜索,它将以相同的方式显示数据正确。您知道PHP中的某些设置是否可以解决此问题吗?再次感谢。