Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Таблица с текстом в UTF-8


Автор: Elfet 19.9.2008, 18:50
Всем привет!
Опять проблемы с этими кодировками. Как правильно создать таблизу для работы с UTF-8 в MySQL?
Я делаю вот так, но это похоже не всегда работает:
Код

CREATE TABLE `rooms` (
   `id` varchar(255) NOT NULL,
   `name` text character set utf8 collate utf8_general_ci NOT NULL,
   `password` varchar(255) character set utf8 collate utf8_general_ci NOT NULL,
    KEY `id` (`id`)
    ) DEFAULT CHARSET=utf8;


Автор: skyboy 19.9.2008, 20:25
Цитата(Elfet @  19.9.2008,  17:50 Найти цитируемый пост)
но это похоже не всегда работает:

ну, да. до версии 4.1 http://phpfaq.ru/charset#full. но найит версию до 4.1 надо постараться.
Цитата(Elfet @  19.9.2008,  17:50 Найти цитируемый пост)
Как правильно создать таблизу

с твоим кодом у тебя проблемы?

Автор: Elfet 19.9.2008, 21:28
Да, на 5.0 пришлось изменить сравнение на cp1251_general_cs

Автор: skyboy 19.9.2008, 21:37
не понимаю. у тебя проблема в работе какой-то программы с БД или в работе самой БД?

Автор: Elfet 19.9.2008, 22:13
Проблема в работе моего скрипта с БД. На разных версиях MySQL разные проблемы. Как правильно работать с мускулом в UTF-8?  smile 

Автор: skyboy 19.9.2008, 23:31
Цитата(Elfet @  19.9.2008,  21:13 Найти цитируемый пост)
Проблема в работе моего скрипта с БД. 

ээээ....и где этот таинственный скрипт?
не могу сказать, что давно работаю с PHP, но за два года никаких "универсальных" ошибок MySQL не встречал. Практически всегда были проблемы либо скрипта, либо механизма работы скрпта с БД. т.е. проблему без анализа кода скрипта не решить.

Автор: Elfet 20.9.2008, 11:46
Скрипт очень большой, во вырезка из него:
Код

    function connect()
    {
        $this->id = mysql_connect($this->hostname,$this->username,$this->password);
        if( !$this->id )
        {
            @elfchat_error('noconnect');
        }
        if(!mysql_select_db($this->dbname, $this->id))
        {
            @elfchat_error('noselect');
        }
        mysql_query("SET NAMES 'utf-8'");
    }

А остальное просто загрузка по mysql_query

Автор: teroni 21.9.2008, 13:28
Может просто дефис в кодировке лишний?
Код

SET NAMES 'utf8'

Автор: nextzi0 21.9.2008, 19:15
Обьясните, в чем преимущество кодировки utf8, когда большинство ресурсов работают с cp1251, хранение данных в ней в базе занимает меньше места, да и проблем с ней меньше?

Автор: Fenrir13 21.9.2008, 19:18
Чтобы не было проблем с UTF-8, нужно выполнение трех условий:
  • Кодировка полей таблицы - UTF-8 (по вашему CREATE TABLE это выполнено)
  • Соединение с базой в UTF-8 (см. ответ teroni)
  • Отсутствие уже битых значений в таблице.
Если вы переносили свою базу, то могли побить кодировку в процессе. Или у вас изначально не выполнялось условие 2 и фактически вы записали в таблицу данные в cp1251, чего и не заметили до установки "правильной" кодировки соединения. Либо периодически теряете условие 3.

Автор: Elfet 22.9.2008, 17:33
Fenrir13, то что нужно ,спасибо!

Автор: nextzi0 23.9.2008, 19:42
Не хочу создавать новую тему, может здесь мне кто разъяснит некоторые моменты с кодировками...
У меня база хранит данные в кодировке utf8. Поиск и сортировка ведется по правилу utf8_general_ci.
Как мне в моем браузере отобразить символы кодировки utf8, когда кодировка браузера установлена в cp1251? 
set character_set_results? Мне нужно чтоб моя база хранила разного рода символы (иероглифы, арабские и тп.) - utf8, и в браузере с кодировкой cp1251 чтоб они тоже отображались.
Вот например взять сайт вконтакте.ру - у меня в браузере выводтся всякие там иероглифы, сердечки, которые юзеры ставят... А мой браузер использует кодировку 1251, как такое возможно? Не пойму...

Автор: bars80080 23.9.2008, 20:06
http://php.ru/manual/function.iconv.html

Автор: nextzi0 23.9.2008, 21:18
Спасибо, функция пригодится. Но я немного не пойму....
Допустим эта функция переконвертила нужную мне строку из utf8 в cp1251 например такую
(¯`v´¯)
`•.¸.•´
¸.•´¸.•´¨) ¸.•*¨)
(¸.•´ (¸.•´ .•´¸¸.•¨¯`•☻ 
каким образом она отображается у меня на экране если в cp1251 нет некоторых символов?
Понять бы это...как все это работает (было б лучше на примере какого нибуть ресурса в инете)

И еще нашел тут :
в MySQL появились две новые команды
set character_set_client
и
set character_set_results
Первая указывает, в какой кодировке приходят данные в базу, а вторая - в какой их выдавать. Поскольку чаще всего эти кодировки совпадают, то можно писать короче - один запрос "SET NAMES кодировка", который и устанавливает оба эти параметра.
Причем по отдельности если ставить, то у меня не работает, работает только с SET NAMES

Автор: Elfet 24.9.2008, 15:22
nextzi0, тебе нужно в браузере поменять кодировку на UTF-8?

Автор: nextzi0 26.9.2008, 16:54
Ну вот и я про это...
Даже на на этом форуме: что 1251 что UTF8 - у меня все отображается нормально!
Смотрю вот в метатеге этой страницы стоит набор символов  UTF8, а у меня в браузере - 1251 и я все равно вижу нормально все!

Автор: Elfet 27.9.2008, 21:32
У меня в браузере тут стоит UTF-8. Если метатеги не срабатывают, то лучше напрямую в заголовке послать кодировку. Например на php:
Код

Header("Content-Type: text/html; charset=utf-8");


Автор: nextzi0 3.10.2008, 10:12
Цитата(Elfet @ 24.9.2008,  15:22)
nextzi0, тебе нужно в браузере поменять кодировку на UTF-8?

Если я ее поменяю то у меня будут не различимы символы из кодировки 1251

Автор: Elfet 3.10.2008, 10:49
Нужно выбрать одну кодировку и в ней всё отправлять пользователю.

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