我如何使用UTF-8字符进行SQL查询?

时间:2014-01-27 01:15:48

标签: php mysql sql utf-8 pdo

<?php 
    $path               = "mysql:host=localhost;dbname=kanjisearch;charset=utf-8";
    $pdo                = new PDO($path, "xxx", "xxx");
    $sth                = $pdo->prepare("SELECT * FROM `kanji` WHERE `kanjiName` = '$kanji'");
    $sth->execute();
    $results            = $sth->fetchAll();
?>

我正在构建一个在实际SQL查询中使用中文字符的PHP搜索,我有 - &gt; exec(“SET CHARACTER SET utf8”);在pdo上。它渲染得很好,我带回来的文字渲染的charects很棒,如果我把数字放在sql但我需要基于汉字搜索,所以当我用WHERE kanji =一查询时,一似似乎没有通过确定,它在调试的屏幕上呈现,但只是不会查询,结果返回空,但当我将查询直接复制到PHPMyAdmin时,它返回结果。

3 个答案:

答案 0 :(得分:0)

使用UTF-8字符集创建的表和列是否为默认编码?默认情况下,MySQL使用基于拉丁语的字符集和整理选项创建表。当UTF-8保存在拉丁编码列中时,UTF-8,特别是没有latiin字符会被破坏。

尝试使用ALTER表命令更改表的charset以使用UTF8并重新加载/插入数据。

答案 1 :(得分:-1)

尝试将编码(accept-charset =“UTF-8”和charset = utf-8“)添加到您的表单和html头部:

<form method="post" action="yourAction" accept-charset="UTF-8">

<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>

编辑:也看看这个类似的问题here。 (by shark555)

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

答案 2 :(得分:-1)

$ kanji需要作为特定/特定字符集处理。 因此,输入的内容可能不会被视为UTF-8编码的字符串。你需要处理这个。

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

基本上你想转换为UTF-8。但试试这个: http://us1.php.net/mb_convert_encoding

  • mb_convert_encoding($ text,'UTF-8');
  • 或者如果你知道语言棒的编码是第3个参数。
  • 或尝试自动:mb_convert_encoding($ text,'UTF-8','auto');