数据库未正确存储希腊字符

时间:2011-04-25 13:27:22

标签: php mysql

下午好,所有人,

我最近在远程服务器上部署了一个网站,并使用相同的mySQL创建脚本创建了一个数据库。其中两个字段需要显示希腊字符,因此它们的排序规则设置为greek_general_ci。这在我的本地开发机器上工作正常(这与服务器上的设置相同,可能有一些安全设置不同。)但是......

我已经在数据库中添加了一些内容,而我在数据库中的所有内容都是?????而不是我在本地机器上获得的希腊字符Unicode代码。

我已检查过服务器是否已打开校对,以及正确的字符集。我用谷歌搜索了答案,但唉,我没有成功。我想知道这是否是我可以解决的问题,或者我应该联系服务器管理员让他们看看它?因为我不想搞乱服务器设置,因为有一个实时网站运行相同的数据库引擎。

非常感谢提前。

我被要求在这里发布代码,所以这是代码。

AddWord.html我只添加了表单,因为这是所有需要看到的。

<form name="addwrd" action="addWord.php" method="post">
                        <label for="greek_word">Greek Word</label>
                        <input type="text" onkeyup="trans(this.id)" id="greek_word" name="GreekWord" size=30><br><br>                        
                        <label for="greek_definition">Greek Definition</label>  
                        <input type="text" onkeyup="trans(this.id)" id="greek_definition" name="GreekDefinition" size=30><br><br>
                        <label for="EnglishWord">English Word</label>
                        <input type="text" name="EnglishWord" size=30><br><br>
                        <label for="EnglishDefinition">English Word</label>
                        <input type="text" name="EnglishDefinition" size=30><br><br>
                        <label for="chapter">Chapter</label>
                        <input type="text" name="chapter" size=20><br><br>
                        <label for="section">Section</label>
                        <input type="text" name="section" size=20><br><br>
                        <label for="hint">Hint</label>
                        <input type="text" name="hint" size=50><br><br>
                        <input type="submit" name="addword" value="Submit">
                    </form>

AddWord.php

include_once( 'admin_dataHandler.php' );

$dataHandler = new DataConnection();

/** 
 * The variables we're getting back from the HTML form we've just filled
 * in.
 */
$greekWord = $_POST['GreekWord'];
$greekDef = $_POST['GreekDefinition'];
$englishWord = $_POST['EnglishWord'];
$englishDef = $_POST['EnglishDefinition'];
$chapter = $_POST['chapter'];
$section = $_POST['section'];
$hint = $_POST['hint'];

$dataHandler->addWord($greekWord, $greekDef, $englishWord, $englishDef, $chapter, $section, $hint);
// The header should redirect to the admin index.html page.

这是数据处理程序中的代码,用于将单词添加到数据库中。

function addWord($grkWrd, $grkDef, $engWord, $engDef, $chptr, $sects, $hint){
            $sql = "INSERT INTO word (GreekWord, GreekDefinition, EnglishWord, EnglishDefinition, Chapter, Sections,Hint) values (:grkWrd,:grkDef,:engWrd,:engDef,:chptr,:sctn,:hnt)";
            $stmt = $this->dataHandler->prepare( $sql );
            $stmt->bindParam(':grkWrd', $grkWrd , PDO::PARAM_STR, 45);
            $stmt->bindParam(':grkDef', $grkDef , PDO::PARAM_STR, 45);
            $stmt->bindParam(':engWrd', $engWord , PDO::PARAM_STR, 45);
            $stmt->bindParam(':engDef', $engDef , PDO::PARAM_STR, 45);
            $stmt->bindParam(':chptr', $chptr , PDO::PARAM_STR, 45);
            $stmt->bindParam(':sctn', $sects , PDO::PARAM_STR, 45);
            $stmt->bindParam(':hnt', $hint , PDO::PARAM_STR, 45);
            $stmt->execute();
        }

我希望这会提供更多信息,对于第一次不发布代码表示歉意。

感谢您抽出时间来研究这个问题。

Welshboy

2 个答案:

答案 0 :(得分:4)

我认为所有这些希腊字符都应该包含在UTF8中,并且你可以通过设置一切来使用UTF8来节省一些悲伤。

您谈到了希腊字符unicode代码,但greek整理不是unicode,而是ISO 8859-7(请参阅Character Sets and Collations That MySQL Supports

我几天前写了一篇关于PHP / MySQL字符集问题的文章,我认为可能有一些相关的信息。 How to Avoid Character Encoding Problems in PHP

答案 1 :(得分:0)

我真的怀疑这是数据库的问题。您应该仔细检查您的代码,或在此处发布,因为这是迄今为止最可能的罪魁祸首。