SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.07.2008 17:44:01

safo
Участник
Зарегистрирован: 02.07.2008
Сообщений: 5

Кодировка utf-8. Что с символом "ш"?

Локально все работает. Кодировка базы и таблицы utf-8. При импорте на хостинг символ "ш" не хочет правильно отображаться/распознаваться. В чем дело? Помогите.

Неактивен

 

#2 02.07.2008 17:55:38

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Кодировка utf-8. Что с символом "ш"?

А файл с данными в какой кодировке? И правильно ли написана эта буква в этом файле?

Неактивен

 

#3 02.07.2008 18:07:18

safo
Участник
Зарегистрирован: 02.07.2008
Сообщений: 5

Re: Кодировка utf-8. Что с символом "ш"?

Да, файл тоже в utf-8. Дома локально все правильно. Никаких вопросов. MySQL5 на хостинге, как и у меня. Операционка W2003. Почему такая фигня не пойму? Еще заметил, что вместо символа "И" отображается "п". Может еще чего вылезет, но пока таблица небольшая, тестовая.

Неактивен

 

#4 02.07.2008 19:12:00

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Кодировка utf-8. Что с символом "ш"?

Попробуйте сделать
CREATE TABLE test (z VARCHAR(100)) CHARSET utf8;
INSERT INTO test VALUES ('абв....эюя');

И посмотреть, как это импортируется в базу.

Неактивен

 

#5 03.07.2008 10:11:13

safo
Участник
Зарегистрирован: 02.07.2008
Сообщений: 5

Re: Кодировка utf-8. Что с символом "ш"?

Создаем базу (РНР) и вставляем символы

$mysqli=@mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
if(mysqli_connect_errno()){echo 'Can\'t connect to DB';exit;}

$query='CREATE TABLE test (x TEXT) CHARSET utf8';
$res=@mysqli_query($mysqli,$query);
if($res){
    $query='INSERT INTO test VALUES ("АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя")';
    $res=@mysqli_query($mysqli,$query);
    if($res){echo 'OK';}else{echo mysqli_error($mysqli).'<br><br>';}
}else{echo mysqli_error($mysqli);}

Тестовая страничка (РНР):

header('Content-Type: text/html; utf-8');
echo '<html><head><title>TEST PAGE</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body>';

$mysqli=@mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
if(mysqli_connect_errno()){echo 'Can\'t connect to DB</body>';exit;}
$query='SELECT * FROM test';
$res=@mysqli_query($mysqli,$query);
if($res){
    while($row=mysqli_fetch_assoc($res)){echo $row['x'].'<br>';}
}else{echo mysqli_error($mysqli).'<br><br>';}

echo '</body>';



Результат можно увидеть по ссылке latebra.ru/tst.php

Та же фигня. А дома нормально.

Неактивен

 

#6 03.07.2008 10:15:32

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Кодировка utf-8. Что с символом "ш"?

Добавьте после подключения
mysqli_query("SET NAMES UTF8");
в оба скрипта. Останется ли эффект?

Неактивен

 

#7 03.07.2008 10:31:32

safo
Участник
Зарегистрирован: 02.07.2008
Сообщений: 5

Re: Кодировка utf-8. Что с символом "ш"?

Добавил

mysqli_query($mysqli,"SET NAMES UTF8");

Все пошло. Можно немного пояснить процесс? У меня локально настройки какие есть, которых нет на хостинге? Или как?

Отредактированно safo (03.07.2008 10:32:06)

Неактивен

 

#8 03.07.2008 10:38:57

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Кодировка utf-8. Что с символом "ш"?

Пояснение см. в статье http://sqlinfo.ru/articles/info/2.html

Локально Ваш клиент подключается по умолчанию в кодировке UTF8. Сложно сказать почему это происходит, может это новый PHP какой-то. Обычно PHP подключается в той кодировке, с которой скомпилирован.

Неактивен

 

#9 03.07.2008 10:39:47

safo
Участник
Зарегистрирован: 02.07.2008
Сообщений: 5

Re: Кодировка utf-8. Что с символом "ш"?

Благодарю. Почитаю.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson