Jump to content
  • 0

PHP + MySQL (кодировка)


Razor
 Share

Question

Привествую!

В общем, я только начал изучать php и использовать mysql, посему у меня проблемы с кодировкой возникли (тем более, кодировка всегда больным местом у меня была).

В общем создал БД и пару таблиц в кодировке cp1251, затем через php делаю select запрос, и кодировка получается сбитая (не вопросы, а разные спец-символы-крякозябры).

Искал в интернете выполнять после подключения к б.д. запрос set names cp1251 , но тоже но помогло(

В общем, напишите небольшую инструкцию какую кодировку лучше использовать, если учитвать что БД создается с нуля, и php -скрипт тоже (данные в таблице на русском и англ.языке). Т.е. имею ввиду не просто какую кодировку, а как все это сделать чтоб правильно работало?

1. Какую кодировку БД выбрать, какой набор символов

2. Какую кодировку таблицы (оставлять по-умолчанию?)

3. Какие дополнительные запросы длеать в php для установки кодировки.

4. Ну и если я еще что-то забыл или не учел ?

В общем, quick-мануальчик чтобы это заработало на минимальном уровне, а то 3 часа уже сижу, скоро головой буду биться, в какую сторону копать незнаю(

Спасибо заранее, господа, надеюсь на вашу помощь.

p.s. чутли не забыл, использую Denwer 3 (php5 и mysql5)

Edited by Razor
Link to comment
Share on other sites

18 answers to this question

Recommended Posts

  • 0

1. Перекодируй все таблицы в utf-8

2. Перекодируй все файлы в utf-8 без БОМ.

3. Укажи кодировку в метатегах

4. Укажи кодировку .htacceess

AddDefaultCharset UTF-8

5. И укажи кодировку после подключения к бд:

mysql_query("set character_set_client='utf8'");

mysql_query("set character_set_results='utf8'");

mysql_query("set collation_connection='utf8_general_ci'");

Edited by haZe
Link to comment
Share on other sites

  • 0

Что я тогда не так делаю?(

в my.ini в секции [mysqld] прописал

default-character-set = utf8

init-connect = "set names utf8"

Бд создал:

Character set - utf-8

Collation - utf8_general_ci

Таблицу создал:

Character set - utf-8

Collation - utf8_general_ci

в php соединяюсь с БД, далее выполняется

mysql_query('SET NAMES utf8');

и все= кодировка кривая ((( Ну помогите пожалуйта, как сделать чтобы хоть как-то работало?(

Link to comment
Share on other sites

  • 0

Странно как-то... Для базы данных указывал кодировку: utf8_general_ci

$command_new_db = "CREATE DATABASE `$new_db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";

Потом создал таблицу

$command_new_table = "
CREATE TABLE ".$new_table_name." (
id MEDIUMINT( 9 ) NOT NULL AUTO_INCREMENT,
login VARCHAR( 32 ) NOT NULL,
pass VARCHAR( 32 ) NOT NULL,
email VARCHAR( 64 ) NOT NULL,
status TINYINT( 2 ) NOT NULL DEFAULT '0',
timestamp INT( 10 ) NOT NULL,
PRIMARY KEY (id)
) ENGINE = MYISAM
";

В PHPMyAdmin показано, что строки таблицы тоже в кодировке utf8_general_ci.

Все страницы добавления данных в базу данных, сохранены в кодировке UTF8.

Но данные сохраняются в таком виде:

Если РІС‹ РЅРµ писали пшогшамм Р...

Кто может подсказать, в чём проблема?

Edited by Boron
Link to comment
Share on other sites

  • 0

Привет, а другого способа решить проблему с кодировкой нет? а то стрёмно каждый раз вводить:

mysql_query("set character_set_client='utf8'");

mysql_query("set character_set_results='utf8'");

mysql_query("set collation_connection='utf8_general_ci'");

Возможно есть какой то кардинальный метод решения, заранее благодарю за помощь )

Link to comment
Share on other sites

  • 0

$command_new_table = "
CREATE TABLE ".$new_table_name." (
id MEDIUMINT( 9 ) NOT NULL AUTO_INCREMENT,
login VARCHAR( 32 ) NOT NULL,
pass VARCHAR( 32 ) NOT NULL,
email VARCHAR( 64 ) NOT NULL,
status TINYINT( 2 ) NOT NULL DEFAULT '0',
timestamp INT( 10 ) NOT NULL,
PRIMARY KEY (id)
) ENGINE = MYISAM
";

в конце надо было просто взять и вот так прописать:


CREATE TABLE ".$new_table_name." (
id MEDIUMINT( 9 ) NOT NULL AUTO_INCREMENT,
login VARCHAR( 32 ) NOT NULL,
pass VARCHAR( 32 ) NOT NULL,
email VARCHAR( 64 ) NOT NULL,
status TINYINT( 2 ) NOT NULL DEFAULT '0',
timestamp INT( 10 ) NOT NULL,
PRIMARY KEY (id)
) ENGINE = MYISAM AUTO_INCREMENT=1 /*!40101 DEFAULT CHARSET=utf8 */;

Привет, а другого способа решить проблему с кодировкой нет? а то стрёмно каждый раз вводить:

mysql_query("set character_set_client='utf8'");

mysql_query("set character_set_results='utf8'");

mysql_query("set collation_connection='utf8_general_ci'");

Возможно есть какой то кардинальный метод решения, заранее благодарю за помощь )

в конфигурационном файле прописать и все! он же все-равно подключается к страницам ко всем.

Link to comment
Share on other sites

  • 0

в конфигурационном файле прописать и все! он же все-равно подключается к страницам ко всем.

Этот вариант тоже не подходит у меня локальный сервер денвер там все страницы в кодировке 1251, естественно когда меняю кодировку в httpd.conf на utf-8 страницы самого денвера отображаются не верно(на хостинге этих проблем нет).

А на локальном прописывал в корне сайтов .htaccess utf-8 проблем с кодировкой не было пока не решил изучать MySQL.

Нельзя ли как то MySQL настроить что бы он мне отдавал понятный utf-8 а не какой то продвинутый utf8_general_ci :)

Edited by Tiristor
Link to comment
Share on other sites

  • 0

Нельзя ли как то MySQL настроить что бы он мне отдавал понятный utf-8 а не какой то продвинутый utf8_general_ci :)

конфигурационный файл я имел ввиду php-шный, в котором настройки коннекта к бд прописаны.

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

во-вторых, мускул не может "отдавать" в полном понимании этого слова кодировку, ее вместе с ответом на запрос серверу отдает сервер через заголовки header.

Link to comment
Share on other sites

  • 0

Привет может все таки конкретизируете что именно вписывать в файл php.ini или my.ini ?

при чем тут .ini? я вообще про ваш php коннектор к бд... ладно, проехали.

haZe уже все описал выше что нужно делать.

Link to comment
Share on other sites

  • 0

haZe уже все описал выше что нужно делать.

Да то что haze написал работает(я этот вариант и пользовал) и его посты информативны и конкретны.

Хотелось бы что бы посты многих пользователей и модераторов можно было бы так охарактеризовать.

Link to comment
Share on other sites

  • 0

то что вы делает называется - бессмысленная провокация на флуд.

Хотелось бы что бы посты многих пользователей ... можно было бы так охарактеризовать.

мне тоже так хотелось бы ;)

Link to comment
Share on other sites

  • 0

Если вы работайте с БД с помощью mysql, то для кодировки cp1251 надо сделать казой запрос


mysql_query("SET NAMES `cp1251`");

Усли же работайте с PDO API, то так


$connect->query("SET NAMES `cp1251`");

Где $connect является переменная соединения с БД

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy