|
|
|
| Здравствуйте!
Пожалуйста, помогите!
Я делаю сайт с фотогалереей. За основу взял скрипты из главы 12 "Фотогалерея" книги М. Кузнецова, И. Симдянова, С. Голышева "PHP5 Практика создания WEB-сайтов" 2006 г.
В кодировке 1251 всё работает хорошо. Но, когда я попытался перевести сайт в utf8, начались проблемы, описание которых, в интернете, не нахожу.
Они заключаются в том, что слова (названия фотографий) состоящие из букв "Р", с "Т" по "Ю", например: "пеЧка", не вставляются в MySQL из админки на php.
И скрипт:
<?php
$query = "INSERT INTO photo SET namefoto= '".$namefoto."'";
if(mysql_query($query))
{
// Осуществляем автоматический переход на главную
// страницу администрирования
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php?id_parent=".$_POST['id_catalog']."'>
</HEAD>";
}
else
{
exit('<blockquote>Ошибка при добавлении новой записи в таблицу фотографий</blockquote>');
}
?>
|
где $namefoto="печка", выдаст "Ошибка при добавлении новой записи..."
Если же слова составлены из букв с "А" по "П", а также "С" и "Я", например : $namefoto="пенка", то тот же скрипт работает, вроде бы, абсолютно нормально,
и такие слова прекрасно заносятся в MySQL и в дальнейшем с ними проблем нет.
То же самое происходит и при UPDATE.
С помощью phpMyAdmin "запретные" буквы в MySQL заносятся. И даже выводятся с помощью SELECT. Но если это слово - ссылка и используется для преобразования
URL-адреса с помощью mod_rewrite, появляются кракозябры и ссылка не работает. При "разрешенных" буквах всё хорошо.
Пробовал преобразовать сайт из 1251 в utf8 и в "Денвере". Но и там происходит почти то же самое. С той только разницей, что скрипт не выдаёт ошибки, а просто отсекает все буквы в слове, начиная с "запретной". При $namefoto="печка" в MySQL заносится только "пе".
Пожалуйста, подскажите, что делать? | |
|
|
|
|
|
|
|
для: tourist
(26.11.2013 в 10:57)
| | Попробуйте сразу после подключения к БД выполнить запрос:
Кроме того, сама таблица должна иметь сопоставление с utf8. Т.е. результат запроса на создание таблицы:
SHOW CREATE TABLE `table_name`;
| должен заканчиваться на:
Если это не так, то нужно исправить. | |
|
|
|
|
|
|
|
для: tourist
(26.11.2013 в 10:57)
| | когда добавляем VALUES здесь тоже исправь
<? $query = "INSERT INTO photo VALUES namefoto = '".$namefoto."'";
|
| |
|
|
|
|
|
|
|
для: Jovidon
(27.11.2013 в 09:52)
| | Вы не правы!
13.2.5. INSERT Syntax | |
|
|
|
|
|
|
|
для: Sfinks
(27.11.2013 в 09:56)
| | а я этого не знал, спасибо | |
|
|
|
|
|
|
|
для: Jovidon
(27.11.2013 в 11:47)
| | Здравствуйте!
Спасибо за совет!
Но всё это у меня уже есть.
Подключаюсь к базе так:
<?php
//подключаемся к MySQL
mysql_connect($sqlhost,$sqluser,$sqlpass) or die("MySQL не доступен! ".mysql_error());
//подключаемся к базе данных
mysql_select_db($db)or die("Нет соединения с базой данных! ".mysql_error());
mysql_query ("SET NAMES 'utf8'");
?>
Таблицу создаю так:
CREATE TABLE IF NOT EXISTS `photo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`namefoto` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=74 ;
Настройки MySQL такие:
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\ |
+--------------------------+----------------------------+
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
Но при этом треть русских букв MySQL не воспринимает. А может быть проблема не в MySQL?
Но дело и не в VALUES.
Вот цитата из книги А.Мотева "Уроки MySQL", 2006 г., стр.100:
"Для внесения данных в определенные поля также можно использовать синтаксис:
INSERT INTO имя_таблицы SET имя_поля=значение[, имя_поля=значение,...];
Здесь оператор INSERT вставляет в поля, определенные в предложении SET, заданные значения.
Если поля не определены, в них вставляется значение по умолчанию."
Да и у меня, например, слово "пенка" вставляется без проблем и с SET. А в кодировке 1251 и вообще
всё замечательно.
Тут что-то не так с utf8. Создаётся впечатление, что когда эту кодировку конструировали или когда вставляли её в MySQL, забыли о некоторых русских буквах.
У кого-нибудь utf8 работает в MySQL без ошибок? | |
|
|
|
|
|
|
|
для: tourist
(27.11.2013 в 12:52)
| | а если так
<? $query = "INSERT INTO photo SET namefoto = '" . mysql_real_escape_string($namefoto) . "'";
|
| |
|
|
|
|
|
|
|
для: tourist
(27.11.2013 в 12:52)
| | > У кого-нибудь utf8 работает в MySQL без ошибок?
Да у всех работает... И в Windows и в Linux и где угодно.
Честно говоря, я в тупике.... У вас вроде все правильно настроено.
Вот еще смотрите что я нашел в юзер-камментах к мануалу:
I tried all the above hints but still couldn't get it to work (using mySql and PHP 5 server)... 'till I found and tried also this:
add to the .htaccess file this single line:
AddDefaultCharset UTF-8
Still not sure why this was important to the whole, but now it works as planned! Thanks!
Попробуйте, может и вам поможет?....
А вообще, почитайте сами, может что найдете: http://dev.mysql.com/doc/refman/5.5/en/charset-connection.html | |
|
|
|
|
|
|
|
для: Sfinks
(28.11.2013 в 08:34)
| | Здравствуйте!
Наконец, нашел ошибку!
Это всё происходило из-за регулярных выражений. В utf8 они работают по другому. Их надо модифицировать. Они и сбивали кодировку.
Спасибо за помощь! | |
|
|
|
|
|
|
|
для: tourist
(29.11.2013 в 14:13)
| | Ну как бы в топике о РВ нет ни слова....
А так да, к ним нужно добавлять модификатор "u" | |
|
|
|