用PHP在Sqlite数据库中搜索中文字符不匹配


Searches for Chinese characters in Sqlite database with PHP don't match

我有一些麻烦让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, 16LE(只是在折腾),但这没有任何作用。

字段的数据类型设置为nchar,但将其设置为文本不会产生不同的结果。类似地,使用SQLite3代替PDO也没有改变。

任何想法?提前感谢您的帮助

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

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

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

简单的答案,一个我采取,因为我不能得到编码jive,只是使用base64_encode查询进入数据库,解码的信息出来。它不是很优雅,但它允许utf字符进入非utf数据库。

http://jp2.php.net/manual/en/function.base64-encode.php