SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 14.09.2011 23:47:19

byhh
Участник
Зарегистрирован: 14.09.2011
Сообщений: 11

опять же проблема с кодировкой

Ребят, уже пару часов мучаюсь с mysql, не хочет отображать кириллицу.
Менял кодировки на сайте и в самой бд, но изменения были только такие ??? и такие ńāåęč. smile
Полазил я по форуму, узнал о таком запросе...
SHOW GLOBAL VARIABLES LIKE 'char%';

character_set_client latin1
character_set_connection latin1
character_set_database latin1
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir C:\Webserver\xampp\mysql\share\charsets\

Как изменить с latin1? И что лучше отображает кириллицу?

Неактивен

 

#2 14.09.2011 23:54:31

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

Re: опять же проблема с кодировкой

Лучше всего в современном мире использовать utf8, потому что тогда можно
закодировать как кириллицу, так и «ńāåęč».

Что касается отображения — надо было начать с FAQ#8. Обратите внимание,
что там стоит 1251, а не utf8, потому что большинство людей в России почему-
то считают, что русских букв им достаточно (но Вы можете быть в меньшинстве,
зато всё делать правильно) wink

Неактивен

 

#3 15.09.2011 00:01:22

byhh
Участник
Зарегистрирован: 14.09.2011
Сообщений: 11

Re: опять же проблема с кодировкой

Насчёт SET NAMES cp1251 забыл добавить, что при подключении к серверу уже прописанн запрос mysql_query("SET NAMES cp1251",$db);

Неактивен

 

#4 15.09.2011 08:54:51

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

Re: опять же проблема с кодировкой

Тогда читайте статью: http://sqlinfo.ru/articles/info/5.html .
Скорее всего, данные помечены как latin1, а сами по себе cp1251. Ну то есть
можно закостылить убиранием SET NAMES smile

Неактивен

 

#5 15.09.2011 16:00:14

byhh
Участник
Зарегистрирован: 14.09.2011
Сообщений: 11

Re: опять же проблема с кодировкой

Что-то не помогла ваша статья.
Делал по пункту "Решение проблемы: метод сервера"

Неактивен

 

#6 15.09.2011 17:12:05

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

Re: опять же проблема с кодировкой

Хорошо, давайте по пунктам. В какой кодировке хранятся данные в таблице,
и какой кодировкой они реально подписаны?

Неактивен

 

#7 15.09.2011 18:51:11

byhh
Участник
Зарегистрирован: 14.09.2011
Сообщений: 11

Re: опять же проблема с кодировкой

В самом сайте кодировка прописанна windows-1251.
В таблице, которую использую, стоит cp1251_bin.
А так по умалчанию  в phpma стоит Шведский независемый latin1_swedish_ci (не знаю как поменять)
http://img88.imageshack.us/img88/7880/phpma.png

Отредактированно byhh (15.09.2011 18:52:09)

Неактивен

 

#8 15.09.2011 19:01:11

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

Re: опять же проблема с кодировкой

А данные в таблице в какой кодировке лежат? Для этого нужно по крайней
мере посмотреть на данные.

Неактивен

 

#9 15.09.2011 19:06:55

byhh
Участник
Зарегистрирован: 14.09.2011
Сообщений: 11

Re: опять же проблема с кодировкой

В такой же http://img717.imageshack.us/img717/2476/textd.png

Неактивен

 

#10 15.09.2011 19:43:27

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

Re: опять же проблема с кодировкой

Брр. Смотрите, сделаю фокус.

Код:

[silentia] root test > CREATE TABLE pocus (a VARCHAR(20)) CHARSET latin1;
Query OK, 0 rows affected (0.00 sec)

[silentia] root test > SET NAMES latin1;
Query OK, 0 rows affected (0.00 sec)

[silentia] root test > INSERT INTO pocus VALUES ('привет');
Query OK, 1 row affected (0.00 sec)

[silentia] root test > SELECT * FROM pocus;
+--------------+
| a            |
+--------------+
| привет       |
+--------------+
1 row in set (0.00 sec)

[silentia] root test > SHOW CREATE TABLE pocus\G
*************************** 1. row ***************************
       Table: pocus
Create Table: CREATE TABLE `pocus` (
  `a` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

Теперь смотрим сюда и убеждаемся, что в кодировке latin1 нет русских букв.
То есть таблица подписана latin1, а данные в ней лежат в utf8.

Ваша таблица подписана cp1251. А в какой кодировке лежат в ней данные?
Нужно сделать выборку и посмотреть. Можно сделать mysqldump, это будет
сильно проще, чем пробовать угадать в phpmyadmin.

Неактивен

 

#11 15.09.2011 19:56:08

byhh
Участник
Зарегистрирован: 14.09.2011
Сообщений: 11

Re: опять же проблема с кодировкой

paulus написал:

Ваша таблица подписана cp1251. А в какой кодировке лежат в ней данные?
Нужно сделать выборку и посмотреть. Можно сделать mysqldump, это будет
сильно проще, чем пробовать угадать в phpmyadmin.

А можно поподробней пожалуйста, как это зделать!? А то я в этой сфере зелёный ещё sad

Неактивен

 

#12 15.09.2011 20:27:29

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

Re: опять же проблема с кодировкой

В консоли набрать
mysqldump database table > filename, после этого посмотреть, что там получилось.
Если угодно — метод резервных копий из статьи.

Неактивен

 

#13 15.09.2011 23:43:11

byhh
Участник
Зарегистрирован: 14.09.2011
Сообщений: 11

Re: опять же проблема с кодировкой

-- MySQL dump 10.13  Distrib 5.5.8, for Win32 (x86)
--
-- Host: localhost    Database: site
-- ------------------------------------------------------
-- Server version    5.5.8

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+02:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `settings`
--

DROP TABLE IF EXISTS `settings`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `settings` (
  `id` int(2) NOT NULL AUTO_INCREMENT,
  `page` varchar(255) COLLATE cp1251_bin NOT NULL,
  `title` varchar(255) COLLATE cp1251_bin NOT NULL,
  `meta_d` varchar(255) COLLATE cp1251_bin NOT NULL,
  `meta_k` varchar(255) COLLATE cp1251_bin NOT NULL,
  `text` text COLLATE cp1251_bin,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `settings`
--

LOCK TABLES `settings` WRITE;
/*!40000 ALTER TABLE `settings` DISABLE KEYS */;
INSERT INTO `settings` VALUES (1,'index','Главная','Добро пожаловать на сайт','Главная','Блабла'),(2,'articles','Статьи','Статьи','строение','Блабла'),(3,'lessons','Уроки','Уроки','уроки','Виза'),(4,'contacts','О нас','Страница','мы','Блаблабла');
/*!40000 ALTER TABLE `settings` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

Неактивен

 

#14 16.09.2011 10:49:08

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

Re: опять же проблема с кодировкой

Ну вот, данные в utf8. Просто замените
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin;
на
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

И выбросите явный COLLATE со всех столбцов.

Неактивен

 

#15 17.09.2011 12:45:29

byhh
Участник
Зарегистрирован: 14.09.2011
Сообщений: 11

Re: опять же проблема с кодировкой

Создал новую бд. Вот дамп

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+02:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `settings`
--

DROP TABLE IF EXISTS `settings`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `settings` (
  `id` int(2) NOT NULL AUTO_INCREMENT,
  `page` varchar(255) NOT NULL,
  `title` varchar(255) NOT NULL,
  `meta_d` varchar(255) NOT NULL,
  `meta_k` varchar(255) NOT NULL,
  `text` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `settings`
--

LOCK TABLES `settings` WRITE;
/*!40000 ALTER TABLE `settings` DISABLE KEYS */;
INSERT INTO `settings` VALUES (1,'index','Home','HOME','home','<p>ывофоывофоы фывофыово офыовуцкеенк</p>');
/*!40000 ALTER TABLE `settings` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

Всё равно вместо букв вопросительные знаки

Неактивен

 

#16 17.09.2011 21:29:09

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

Re: опять же проблема с кодировкой

А SET NAMES сделали?

Неактивен

 

#17 18.09.2011 12:14:11

byhh
Участник
Зарегистрирован: 14.09.2011
Сообщений: 11

Re: опять же проблема с кодировкой

да

Неактивен

 

#18 18.09.2011 20:46:23

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

Re: опять же проблема с кодировкой

Так не бывает. Можете показать кусочек данных, чтобы я попробовал
восстановить?

Неактивен

 

#19 24.09.2011 02:34:32

byhh
Участник
Зарегистрирован: 14.09.2011
Сообщений: 11

Re: опять же проблема с кодировкой

Проверьте почту

Неактивен

 

#20 25.09.2011 14:57:10

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: опять же проблема с кодировкой

Paulus, так бывает, когда дамп UTF-8 загружается через phpadmin, который в данный момент работает в кодировке win-1251.
Чтобы все работало как надо, изначально все должно быть в UTF-8, т.е. phpadmin только в UTF-8, файлы дампов только в UTF-8 (без BOM), все таблицы в БД и подключения к БД должны быть в UTF-8. И все файлы скриптов, которые запрашивают и обрабатывают данные должны быть в UTF-8. +)

Неактивен

 

#21 26.09.2011 00:31:31

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

Re: опять же проблема с кодировкой

О, круто, а то я никак не мог заставить себя добраться до работающего скрипта
и заставить себя сделать так, чтобы он не работал smile

А мораль очень простая: никогда нельзя использовать phpMyAdmin. Спасибо smile

Неактивен

 

#22 26.09.2011 10:27:05

byhh
Участник
Зарегистрирован: 14.09.2011
Сообщений: 11

Re: опять же проблема с кодировкой

Ясно... Спасибо за помощь

Неактивен

 

Board footer

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