我有一些麻烦让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