ExBB Community » » MySQL » utf-8 и буквы ш и И

Страниц (1): [1]
 

1. spirit - 13 марта 2012 — 14:41 - перейти к сообщению
Танцы с бубном надоели.
Попытаюсь описать проблему как можно понятней.
Значит была база данных и туда пользователями потихоньку заносились данные. И писалось все в cp1251. Сам движок и его страницы были в ansi.
И все это хорошо работало до того момента когда потребовалось внедрить jquery - и подгружать и сохранять некоторые формы асинхронно. JQuery, как выяснилось, не дружит ни с чем кроме как c utf-8. И пошел процесс перекодировки страничек. Все, хорошо - странички в utf-8. В метах прописан utf-8 и браузер это прекрасно понимает. НО! MySql тоже надо сконвертить! Как? Очень просто - дамп средствами phpMyAdmin, изменение кодировки дампа на utf-8 средствами NotePad++ и обратный процесс загрузки дампа. Вот и данные стали по русски и в utf-8... за исключением некоторых букв - И,Э,ш...

Погуглив проблему понял, что средство одно: провести замену кода битых символов так как у mysql кодировка этих символов отличается.
Классический пример решения из интернета:
CODE:

UPDATE `tbl` SET `pole` = REPLACE(
`pole`,
CONCAT( CHAR(209), CHAR(63) ),
CONCAT( CHAR(209), CHAR(136) )
);

UPDATE `tbl` SET `pole` = REPLACE(
`pole`,
CONCAT( CHAR(208), CHAR(63) ),
CONCAT( CHAR(208), CHAR(152) )
);


Это действительно решает проблему, но дело в том что у меня и новые записи уже после конвертации пишутся касячно. Помогайте! Голова взорвалась, мозг ушел от меняНедовольство, огорчение А?!
2. 1Bot - 13 марта 2012 — 15:41 - перейти к сообщению
Можно привести кусок дампа для описания структуры таблиц и данных с буквами "ш и И"
3. spirit - 13 марта 2012 — 16:01 - перейти к сообщению
Конечно:
CODE:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(2) unsigned NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
`lastname` char(20) NOT NULL,
`mail` char(129) DEFAULT NULL,
`phone` char(10) DEFAULT NULL,
`pas` char(40) DEFAULT NULL,
`type` int(1) DEFAULT NULL,
`dj` tinyint(1) DEFAULT NULL,
`lj` tinyint(1) DEFAULT NULL,
`ad` tinyint(1) DEFAULT NULL,
`mc` tinyint(1) DEFAULT NULL,
`dr` tinyint(1) DEFAULT NULL,
`vj` tinyint(1) DEFAULT NULL,
`s` tinyint(1) NOT NULL,
`gr` tinyint(1) NOT NULL,
`time` int(2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=28 ;

--
-- Дамп данных таблицы `users`
--
INSERT INTO `users` (`id`, `name`, `lastname`, `mail`, `phone`, `pas`, `type`, `dj`, `lj`, `ad`, `mc`, `dr`, `vj`, `s`, `gr`, `time`) VALUES
(1, 'Р˜Р»СЊСЏ', 'РџСЊСЏРЅРєРѕРІ', 'XXX@mail.ru', 'XXX', 'XXX', 0, 1, 1, 1, 0, 0, 1, 1, 1, 22),


DEFAULT CHARSET=utf8 поменяно с DEFAULT CHARSET=cp1251 уже после дампа

В частности первая же запись Р˜Р»СЊСЏ - мое имя "Илья"
4. yura3d - 13 марта 2012 — 16:57 - перейти к сообщению
spirit
Попробуйте в скрипте сразу после установки соединения с MySQL выбрать кодировку:
CODE:
mysql_query('SET NAMES utf8;');
5. spirit - 13 марта 2012 — 17:11 - перейти к сообщению
yura3d, благодарю, решение было таким:

CODE:
mysqli->set_charset("utf8");

сразу после соединения с бд и дамп ненужен.
6. yura3d - 13 марта 2012 — 17:52 - перейти к сообщению
spirit
Обращайтесь! Рад помочь
7. yanker - 27 апреля 2012 — 02:23 - перейти к сообщению
Подскажите, пожалуйста, где это надо прописать? В каком файле?
8. 1Bot - 10 декабря 2019 — 17:00 - перейти к сообщению
spirit , вместо
CODE:
DEFAULT CHARSET=utf8

нужно
CODE:
DEFAULT CHARSET=utf8mb4


тогда будет полноценная поддержка всех символов unicode базой данных MySQL.

Яндекс.Метрика   

Powered by ExBB
[Script Execution time: 0.2432]     [ ]