如何在SQL查询中包含UTF-8字符?

19 浏览
0 Comments

如何在SQL查询中包含UTF-8字符?

我正在构建一个使用中文字符作为实际SQL查询的PHP搜索功能,我在pdo中使用了-> exec("SET CHARACTER SET utf8")。它的渲染效果很好,我返回的文本显示了正确的字符,如果我在SQL中放入数字,查询也可以正常进行。但是我需要根据汉字进行搜索,所以当我以WHERE kanji = 一进行查询时,一似乎无法正常通过,它在调试过程中在屏幕上显示,但是查询结果为空,但是当我将查询直接复制到PHPMyAdmin中时,它返回了结果。

0
0 Comments

问题的出现原因是数据库查询中包含了UTF-8字符,但是没有正确处理编码导致查询失败。解决方法是在表单和HTML头部添加编码信息,并且在PHP中设置数据库连接的编码为UTF-8。

具体的解决方法如下:

1. 在表单中添加编码信息:

2. 在HTML头部添加编码信息:


3. 在PHP中设置数据库连接的编码为UTF-8:

$pdo = new PDO(
    'mysql:host=hostname;dbname=defaultDbName',
    'username',
    'password',
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);

这样就能够正确处理包含UTF-8字符的SQL查询了。

0
0 Comments

问题的原因是$kanji需要被处理为特定的字符集,所以输入的内容可能没有被识别为UTF-8编码的字符串。需要对此进行处理。可以尝试使用mb_convert_encoding函数将其转换为UTF-8编码。具体方法如下:

mb_convert_encoding($text, 'UTF-8');

如果你知道输入内容所使用的编码,可以将其作为第三个参数传入。另外也可以尝试使用auto参数进行自动检测:

mb_convert_encoding($text, 'UTF-8', 'auto');

参考链接:

- http://www.fileformat.info/info/unicode/char/4e00/index.htm

- http://us1.php.net/mb_convert_encoding

0
0 Comments

问题的原因是表和列是用UTF-8字符集作为默认编码创建的。默认情况下,MySQL创建的表使用拉丁基字符集和排序选项。当UTF-8,特别是非拉丁字符,保存在拉丁编码的列中时,会导致乱码现象。解决方法是使用ALTER TABLE命令将表的字符集更改为UTF8,并重新加载/插入数据。代码如下:

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

另外,作者尝试将$kanji作为参数传递而不是作为字符串插值。但是这种尝试没有成功。

0