我在使用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,但将其设置为text则不会产生不同的结果。同样,使用SQLite3而不是PDO也不会改变。
有什么想法吗?提前感谢您的帮助。
答案 0 :(得分:0)
默认情况下,Windows控制台无法正确处理UTF-8输入/输出。 您在控制台中输入或编辑的任何数据都是错误的编码。
您可以在运行chcp 65001
之前尝试执行sqlite3.exe
,但最好先使用其他正确处理UTF-8的SQLite工具。
答案 1 :(得分:0)
似乎没有简单的答案,但它不是Windows控制台的问题,因为数据库以相同的方式处理来自浏览器或控制台的所有输入。尽管有消息称sqlite可以使用utf-8,但它似乎可以在ucs-2中运行,这是一种我不知道的编码。我通过解码和编码ucs到utf验证了这一点。
简单的答案和我所采用的那个,因为我无法将编码转换为jive,只是在进入数据库的查询中使用base64_encode,并对出来的信息进行解码。它不优雅,但它允许utf字符进入非utf数据库。