Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Не могу понять, что творится с кодировкой базы


Автор: Borland_Delphi_6 23.12.2009, 22:02
В общем есть у меня база, и я все время полагал, что она как положено живет в UTF-8. Хранятся в ней всякие разные национальные символы, в т.ч. русские. Сейчас начал разбираться с ней, и появились у меня вопросы. Если я делаю 

Код

SET NAMES UTF8

на выходе получаю кракозябы, а если задать
Код

SET NAMES LATIN1

то нормально вижу и русские буквы, и буквы других алфавитов. Почему так, не подскажете? 

Автор: bars80080 23.12.2009, 23:10
ну, какой кодировки база, можно посмотреть всякими запросами, типа show create database, ещё лучше посмотреть какой кодировки таблица show create table и show table status

set names же говорит базе, в какой кодировке клиент, а посему в таком виде отдаются данные. имхо, у тебя клиент работает на latin1.
что же это?

Добавлено через 1 минуту и 5 секунд
да, и данные могли быть уже вставлены и соответствующе перекодированы. вставлялись, указывая базе, что они utf8, а реально слались latin1 (но это уже размышления)

Автор: Borland_Delphi_6 23.12.2009, 23:14
Это PHP и вывод в браузер. Причем браузер определяет кодировку страницы как UTF-8. Вот код:

Код



<?
  $db = mysql_connect("localhost","нихаха","труляля");
  mysql_query("set names utf8"); //так кракозябы, а если закомментить - то нормально ???
  mysql_select_db("ampache_with_old_data" ,$db);
  $sql = mysql_query("SELECT name FROM artist WHERE id = 130" ,$db);
  echo mysql_result($sql, 0);
  mysql_close($db);
?>

Автор: Akina 23.12.2009, 23:15
Цитата(Borland_Delphi_6 @  23.12.2009,  23:02 Найти цитируемый пост)
и я все время полагал

show create table позволяет ЗНАТЬ, а не предполагать.

Автор: Borland_Delphi_6 23.12.2009, 23:29
Ну мои предположения основывались на том, что я при создании указывал UTF-8 + мой клиент (MySQL Front) рапортовал об этой кодировке. show create table показало то же самое - UTF-8. Но отображается все нормально если я ставлю latin1. Мне в принципе не жалко, я просто в толк не возьму, я думал в latin1 в принципе нет, к примеру, русских символов.

Автор: skyboy 23.12.2009, 23:56
ты когда данные в базу заносил, у тебя не было set names utf8, а дефолтная кодировка клиента была latin1. именно в этом случае при установленной для таблицы и полей в ней кодировке utf8 у тебя выборка будет выдавать нечитаемое.

Автор: Borland_Delphi_6 24.12.2009, 16:14
Все понял, так и есть, спасибо! Даже удалось нормально перегнать все из latin в utf8_general_ci  smile 

Кстати, вдруг кому будет полезно: новый Sypex не так давно появился, он-то мне и помог с перекодировкой.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)