#php #mysql
#php #mysql
Вопрос:
Добрый день всем и каждому,
Недавно я развернул веб-сайт на удаленном сервере и, используя тот же скрипт создания MySQL, создал базу данных. В двух полях должны отображаться греческие символы, и поэтому для их сортировки установлено значение greek_general_ci. Это отлично работает на моем локальном компьютере разработчика (который такой же, как настроен на сервере, возможно, несколько настроек безопасности отличаются.) Однако…
Я пошел, чтобы добавить кое-что в базу данных, и все, что я получаю в базе данных, это????? вместо кодов Unicode с греческими символами, которые я получаю на своем локальном компьютере.
Я проверил, что на сервере включены параметры сортировки и правильные наборы символов. И я поискал ответ в Google, но, увы, у меня не было успеха. Мне было интересно, могу ли я это исправить, или мне следует связаться с администратором сервера, чтобы они посмотрели на это? Поскольку я не хочу возиться с настройками сервера, поскольку есть действующий веб-сайт, работающий на том же движке базы данных.
Заранее большое спасибо.
Меня попросили опубликовать код здесь, так что это код в его нынешнем виде.
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();
}
Я надеюсь, что это предоставит дополнительную информацию, приношу извинения за то, что не опубликовал код с первого раза.
Спасибо, что нашли время взглянуть на это.
Валлиец
Комментарии:
1. » Я пошел добавить кое-что в базу данных «. Как? Через PHP-код? phpMyAdmin? Прямой доступ к MySQL?
2. Я добавляю данные через HTML-форму, которая отправляет их в PHP-файл, который действует как интерфейс между HTML и data_admin_handler.php файл, содержащий sql-запрос. Однако это отлично работало на локальном компьютере разработчика… что я нахожу странным.
3. Приятное чтение (если вы еще не прочитали это): joelonsoftware.com/articles/Unicode.html
4. Я прочитаю это сейчас, спасибо за ссылку :-
Ответ №1:
Я думаю, что все эти греческие символы должны содержаться в UTF8, и это избавило бы вас от лишних хлопот, настроив все на использование UTF8.
Вы говорили о кодах Unicode с греческими символами, но greek
параметры сортировки — это не unicode, это ISO 8859-7
(см. Наборы символов и параметры сортировки, поддерживаемые MySQL)
Всего несколько дней назад я написал статью о проблемах с набором символов в PHP / MySQL, в которой, я думаю, могла бы содержаться некоторая соответствующая информация. Как избежать проблем с кодировкой символов в PHP
Комментарии:
1. Прошу прощения за путаницу, когда я заглядываю в свою базу данных, вот что я вижу: amp;#964;amp;#949;amp;#963;amp;#964; Но на удаленном сайте, который я получаю??????? Я думал, что это Юникод, но, очевидно, я ошибаюсь, спасибо за исправление
2. что??? где MySQL пытался перевести символы из одной кодировки в другую (где кодировка соединения отличается от сортировки таблицы)
3. В конце концов, я изменил кодировку полей на utf8_unicode_ci, и это, казалось, устранило проблему. Мне пришлось сделать это в myPHPAdmin. Просто хотел сказать спасибо, что нашли время ответить, и @JamesC ваш ответ заставил меня двигаться в правильном направлении. Отличный пост в блоге. Большое спасибо
Ответ №2:
Я действительно сомневаюсь, что проблема в базе данных. Вам следует дважды проверить свой код или опубликовать его здесь, потому что это, безусловно, наиболее вероятный виновник.