Задавайте вопросы, мы ответим
Вы не зашли.
Ребят, уже пару часов мучаюсь с mysql, не хочет отображать кириллицу.
Менял кодировки на сайте и в самой бд, но изменения были только такие ??? и такие ńāåęč.
Полазил я по форуму, узнал о таком запросе...
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? И что лучше отображает кириллицу?
Неактивен
Лучше всего в современном мире использовать utf8, потому что тогда можно
закодировать как кириллицу, так и «ńāåęč».
Что касается отображения — надо было начать с FAQ#8. Обратите внимание,
что там стоит 1251, а не utf8, потому что большинство людей в России почему-
то считают, что русских букв им достаточно (но Вы можете быть в меньшинстве,
зато всё делать правильно)
Неактивен
Насчёт SET NAMES cp1251 забыл добавить, что при подключении к серверу уже прописанн запрос mysql_query("SET NAMES cp1251",$db);
Неактивен
Тогда читайте статью: http://sqlinfo.ru/articles/info/5.html .
Скорее всего, данные помечены как latin1, а сами по себе cp1251. Ну то есть
можно закостылить убиранием SET NAMES
Неактивен
Что-то не помогла ваша статья.
Делал по пункту "Решение проблемы: метод сервера"
Неактивен
Хорошо, давайте по пунктам. В какой кодировке хранятся данные в таблице,
и какой кодировкой они реально подписаны?
Неактивен
В самом сайте кодировка прописанна windows-1251.
В таблице, которую использую, стоит cp1251_bin.
А так по умалчанию в phpma стоит Шведский независемый latin1_swedish_ci (не знаю как поменять)
Отредактированно byhh (15.09.2011 18:52:09)
Неактивен
А данные в таблице в какой кодировке лежат? Для этого нужно по крайней
мере посмотреть на данные.
Неактивен
В такой же
Неактивен
Брр. Смотрите, сделаю фокус.
[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.
Неактивен
paulus написал:
Ваша таблица подписана cp1251. А в какой кодировке лежат в ней данные?
Нужно сделать выборку и посмотреть. Можно сделать mysqldump, это будет
сильно проще, чем пробовать угадать в phpmyadmin.
А можно поподробней пожалуйста, как это зделать!? А то я в этой сфере зелёный ещё
Неактивен
В консоли набрать
mysqldump database table > filename, после этого посмотреть, что там получилось.
Если угодно — метод резервных копий из статьи.
Неактивен
-- 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 */;
Неактивен
Ну вот, данные в utf8. Просто замените
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin;
на
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
И выбросите явный COLLATE со всех столбцов.
Неактивен
Создал новую бд. Вот дамп
/*!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 */;
Всё равно вместо букв вопросительные знаки
Неактивен
А SET NAMES сделали?
Неактивен
да
Неактивен
Так не бывает. Можете показать кусочек данных, чтобы я попробовал
восстановить?
Неактивен
Проверьте почту
Неактивен
Paulus, так бывает, когда дамп UTF-8 загружается через phpadmin, который в данный момент работает в кодировке win-1251.
Чтобы все работало как надо, изначально все должно быть в UTF-8, т.е. phpadmin только в UTF-8, файлы дампов только в UTF-8 (без BOM), все таблицы в БД и подключения к БД должны быть в UTF-8. И все файлы скриптов, которые запрашивают и обрабатывают данные должны быть в UTF-8. +)
Неактивен
О, круто, а то я никак не мог заставить себя добраться до работающего скрипта
и заставить себя сделать так, чтобы он не работал
А мораль очень простая: никогда нельзя использовать phpMyAdmin. Спасибо
Неактивен
Ясно... Спасибо за помощь
Неактивен