Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: CMS и кодировки
 
 автор: antf   (08.12.2006 в 16:50)   письмо автору
 
 

Здравствуйте. Решил ввести в CMS Proteus полноценную работу с кодировками. У меня возникает несколько вопросов:

Как хранить данные в базе?
ВАриант №1
В одной таблице хранятся данные на нескольких языках с различными кодировками. Все таблицы используют одну и ту же кодировку, кодировку БД по умолчанию. Вопросы:

1. Подскажите, пожалуйста, запрос на получение кодировки БД. Совместим ли он ссо вмеми версиями mysql, начиная с 3.0?
2. Подойдет ли такая схема перекодирования пользовательских данных:

при выводе: кодировки таблицы -> кодировка сайта
при вводе: кодировки сайта -> кодировка таблицы

3. В php для перекодировки существует функция iconv(). Есть ли подобные средства у бд? Какими средствами предпочтительно пользоваться?

Вариант №2
Иметь несколько версий таблиц для различных языков/кодировок. Каждая версия таблицы имеет префикс типа en/ru. Такой вариант сильно усложняет код.

Файловые данные досточно просто хранить в нужной кодировке.

Никто не знает где можно достать список существ. кодировок на англ. языке?

Можно ли как-то решить проблему несовпадения кодировки пользовательских данных с кодировкой сайта?

Заранее спасибо.

   
 
 автор: cheops   (09.12.2006 в 00:19)   письмо автору
 
   для: antf   (08.12.2006 в 16:50)
 

В MySQL начиная с версии 4.1 хранить текст можно в одной кодировке, например, в UTF8, а при выдаче конвертировать в нужную путём настройки кодировки соединения. К сожалению, с более ранними версиями это не пройдёт.

   
 
 автор: antf   (09.12.2006 в 00:56)   письмо автору
 
   для: cheops   (09.12.2006 в 00:19)
 

Тогда придется использовать средства php...

1) Является ли работоспособным 1-й вариант?
2) Можно ли узнать кодировку всей базы данных с помощью sql-запроса?
3) Можно ли перекодировать данные средствами php по схеме, указанной в пункте 2?
4) Как я понимаю при использовании первого варианта не потребуется после соединения с базой выполнять серию запросов на уставку кодировки?

   
 
 автор: cheops   (09.12.2006 в 14:29)   письмо автору
 
   для: antf   (09.12.2006 в 00:56)
 

Для того, чтобы получить универсальное решение (для всех версий) вероятно придётся использовать поля типа BLOB и брать управление кодировками на себя, поиск будет регистрозависимый... Однако, определить кодировку просто по тексту не всегда возможно - по-моему универсального решения нет.

   
 
 автор: antf   (09.12.2006 в 15:01)   письмо автору
 
   для: cheops   (09.12.2006 в 14:29)
 

>> Для того, чтобы получить универсальное решение (для всех версий) вероятно придётся использовать поля типа BLOB

Это уже слишком... Буду ориентироваться на версии 4.1
Хранить текст в utf-8, а выводить в кодировке сайта - приемлемый вариант. Как я понимаю, кодировка выводимых данных определяется в этой серии запросов:

<?php 
mysql_query 
("set character_set_client='cp1251'"); 
mysql_query ("set character_set_results='cp1251'"); 
mysql_query ("set collation_connection='cp1251_general_ci'"); 
?>
[/php]

А разрешает ли хост-провайдер устанавливать кодировку для всей базы, выполнять запрос:

ALTER DATABASE wet 
CHARACTER SET cp1251


А где можно найти список всех кодировок? Совпадают ли обозначения кодировок mysql с обозначениями, кот. указываются в мета-тегах?

   
 
 автор: cheops   (09.12.2006 в 21:55)   письмо автору
 
   для: antf   (09.12.2006 в 15:01)
 

>Как я понимаю, кодировка выводимых данных определяется в этой серии запросов:
Да.

>А разрешает ли хост-провайдер устанавливать кодировку для всей базы, выполнять запрос:
Не всегда... лучше выставлять кодировку для таблиц - это будет всегда разрешено.

>А где можно найти список всех кодировок? Совпадают ли обозначения кодировок mysql с
>обозначениями, кот. указываются в мета-тегах?
Это можно выяснить, выполнив запрос
SHOW CHARACTER SET;

Для того, чтобы получить полный список сортировок следует выполнить запрос
SHOW COLLATION;

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования