PDA

Просмотр полной версии : [Вопрос] Иероглифы в поле "password" MySQL



Nurick
08.12.2015, 13:35
Написал систему регистрации, всё нормально но смущает то что в Базе данных в поле "password" вместо русских букв пишет разные Иероглифы. "Сравнение" стоит "utf8_general_ci".
http://ihost.pro-pawn.ru/image.php?di=74GW

TheMallard
08.12.2015, 13:55
Хэшируй пароли и таких проблем не будет.

Nurick
08.12.2015, 14:37
Для чего??? Я задал другой вопрос а ответ получил вовсе не тот, хотел бы Хеширование паролей сделал бы.

VVWVV
08.12.2015, 15:38
У вас сервер отдает другую кодировку(Windows-1251, русские буквы), а MySQL сервер принимает только кодировку «utf8_general_ci». При хешировании пароля, сервер отдает латинские буквы и цифры.

Nurick
08.12.2015, 16:53
Пробовал ставить сравнение на "cp_1251_general_ci" хотя пишет то что поддерживает "кириллический(многоязычный)" только вместо иероглифов стали Вопросительные знаки "????"

- - - Добавлено - - -


-- phpMyAdmin SQL Dump
-- version 4.5.1
-- http://www.phpmyadmin.net
--
-- Хост: 127.0.0.1
-- Время создания: Дек 08 2015 г., 13:52
-- Версия сервера: 10.1.8-MariaDB
-- Версия PHP: 5.6.14

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!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 utf8mb4 */;

--
-- База данных: `db_server`
--

-- --------------------------------------------------------

--
-- Структура таблицы `players`
--

CREATE TABLE `players` (
`id` int(11) NOT NULL,
`name` varchar(24) NOT NULL,
`password` varchar(15) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

--
-- Дамп данных таблицы `players`
--

INSERT INTO `players` (`id`, `name`, `password`) VALUES
(1, 'Old_Boy', '???????');

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `players`
--
ALTER TABLE `players`
ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `players`
--
ALTER TABLE `players`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
/*!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 */;

VVWVV
08.12.2015, 17:03
Пробовал ставить сравнение на "cp_1251_general_ci" хотя пишет то что поддерживает "кириллический(многоязычный)" только вместо иероглифов стали Вопросительные знаки "????"

- - - Добавлено - - -


-- phpMyAdmin SQL Dump
-- version 4.5.1
-- http://www.phpmyadmin.net
--
-- Хост: 127.0.0.1
-- Время создания: Дек 08 2015 г., 13:52
-- Версия сервера: 10.1.8-MariaDB
-- Версия PHP: 5.6.14

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!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 utf8mb4 */;

--
-- База данных: `db_server`
--

-- --------------------------------------------------------

--
-- Структура таблицы `players`
--

CREATE TABLE `players` (
`id` int(11) NOT NULL,
`name` varchar(24) NOT NULL,
`password` varchar(15) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

--
-- Дамп данных таблицы `players`
--

INSERT INTO `players` (`id`, `name`, `password`) VALUES
(1, 'Old_Boy', '???????');

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `players`
--
ALTER TABLE `players`
ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `players`
--
ALTER TABLE `players`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
/*!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 */;


Ты ставил когда были «Иероглифы»?

Nurick
08.12.2015, 17:06
Да ставил когда были иероглифы, потом они сменились на Вопросительные знаки. Решил попробовать создать новую DB и эффект такой же

VVWVV
08.12.2015, 17:09
Да ставил когда были иероглифы, потом они сменились на Вопросительные знаки. Решил попробовать создать новую DB и эффект такой

Удали строку где были иероглифы, после чего, переставь кодировку в «cp_1251_general_ci», а потом снова зарегистрируй аккаунт.

Дополнительный материал на habr (http://habrahabr.ru/post/201802/)

Nurick
08.12.2015, 17:16
Попробовал как ты сказал нечего не изменилось, так же Вопросительные знаки

VVWVV
08.12.2015, 17:23
Попробовал как ты сказал нечего не изменилось, так же Вопросительные знаки

А у вас есть запрос, который говорит базе какую кодировку использовать?
Если нет, то в OnGameModeInit напишите:

mysql_query(/* Подключение к базе данных */, "set names utf8");

Nurick
08.12.2015, 17:27
mysql_query(/* Подключение к базе данных */, "set names utf8");
Об этом тоже читал на офф. форумах MySQL пробовал ставить но нечего не получается эффект остается таким же "?"

VVWVV
08.12.2015, 17:37
mysql_query(/* Подключение к базе данных */, "set names utf8");
Об это тоже читал на офф. форумах MySQL пробовал ставить но нечего не получается эффект остается таким же "?"

Так должно получится:

-- phpMyAdmin SQL Dump
-- version 4.5.1
-- http://www.phpmyadmin.net
--
-- Хост: 127.0.0.1
-- Время создания: Дек 08 2015 г., 13:52
-- Версия сервера: 10.1.8-MariaDB
-- Версия PHP: 5.6.14

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!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 utf8mb4 */;

--
-- База данных: `db_server`
--

-- --------------------------------------------------------

--
-- Структура таблицы `players`
--

CREATE TABLE `players` (
`id` int(11) NOT NULL,
`name` varchar(24) NOT NULL,
`password` varchar(15) CHARACTER SET cp1251 COLLATE cp1251_general_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COLLATE cp1251_general_ci;

--
-- Дамп данных таблицы `players`
--

INSERT INTO `players` (`id`, `name`, `password`) VALUES
(1, 'Old_Boy', 'Пароль');

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `players`
--
ALTER TABLE `players`
ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `players`
--
ALTER TABLE `players`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
/*!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 */;

Nurick
08.12.2015, 17:56
Импортирую таблицу с вашими параметрами с кодировкой файла windows-1251:
http://ihost.pro-pawn.ru/image.php?di=6M7B

Пробую импортировать с кодировкой файла utf-8:
http://ihost.pro-pawn.ru/image.php?di=3BR3

VVWVV
08.12.2015, 18:28
Импортирую таблицу с вашими параметрами с кодировкой файла windows-1251:
http://ihost.pro-pawn.ru/image.php?di=6M7B

Пробую импортировать с кодировкой файла utf-8:
http://ihost.pro-pawn.ru/image.php?di=3BR3

Вот нашел решение. В OnGameModeInit:

mysql_set_charset("utf8", /* Подключение к базе данных */);

$continue$
08.12.2015, 18:30
Если есть возможность - откати изменения таблицы назад и сделай так:


mysql_set_charset("utf8_bin");
mysql_function_query(/* Подключение к базе данных */, "SET NAMES 'utf8'", false, "", "");
mysql_function_query(/* Подключение к базе данных */, "SET CHARACTER SET 'cp1251'", false, "", "");

Nurick
08.12.2015, 18:41
Решение которое предложил "VVWVV":

connectionMySQL = mysql_connect("127.0.0.1", "root", "db_server", "");
if(mysql_errno() != 0) print("Не удалось подключиться к базе данных!");
else print("База данных успешно подключена!");

mysql_set_charset("utf8", connectionMySQL);

/*mysql_set_charset("utf8_bin");
mysql_function_query(connectionMySQL, "SET NAMES 'utf8'", false, "", "");
mysql_function_query(connectionMySQL, "SET CHARACTER SET 'cp1251'", false, "", "");*/

mysql_log(LOG_ERROR | LOG_WARNING, LOG_TYPE_TEXT);
http://ihost.pro-pawn.ru/image.php?di=NTBY

Решение которое предложил "$continue$":

connectionMySQL = mysql_connect("127.0.0.1", "root", "db_server", "");
if(mysql_errno() != 0) print("Не удалось подключиться к базе данных!");
else print("База данных успешно подключена!");

/*mysql_set_charset("utf8", connectionMySQL);*/

mysql_set_charset("utf8_bin");
mysql_function_query(connectionMySQL, "SET NAMES 'utf8'", false, "", "");
mysql_function_query(connectionMySQL, "SET CHARACTER SET 'cp1251'", false, "", "");

mysql_log(LOG_ERROR | LOG_WARNING, LOG_TYPE_TEXT);
http://ihost.pro-pawn.ru/image.php?di=NTBY

Огромное спасибо вам, особенно "VVWVV" что так усердно пытался помощь!
Тему можно закрывать!

$continue$
08.12.2015, 18:47
Решение которое предложил "VVWVV":

connectionMySQL = mysql_connect("127.0.0.1", "root", "db_server", "");
if(mysql_errno() != 0) print("Не удалось подключиться к базе данных!");
else print("База данных успешно подключена!");

mysql_set_charset("utf8", connectionMySQL);

/*mysql_set_charset("utf8_bin");
mysql_function_query(connectionMySQL, "SET NAMES 'utf8'", false, "", "");
mysql_function_query(connectionMySQL, "SET CHARACTER SET 'cp1251'", false, "", "");*/

mysql_log(LOG_ERROR | LOG_WARNING, LOG_TYPE_TEXT);
http://ihost.pro-pawn.ru/image.php?di=NTBY

Решение которое предложил "$continue$":

connectionMySQL = mysql_connect("127.0.0.1", "root", "db_server", "");
if(mysql_errno() != 0) print("Не удалось подключиться к базе данных!");
else print("База данных успешно подключена!");

/*mysql_set_charset("utf8", connectionMySQL);*/

mysql_set_charset("utf8_bin");
mysql_function_query(connectionMySQL, "SET NAMES 'utf8'", false, "", "");
mysql_function_query(connectionMySQL, "SET CHARACTER SET 'cp1251'", false, "", "");

mysql_log(LOG_ERROR | LOG_WARNING, LOG_TYPE_TEXT);
http://ihost.pro-pawn.ru/image.php?di=NTBY

Огромное спасибо вам, особенно "VVWVV" что так усердно пытался помочь!
Тему можно закрывать!

Проблема решена?

Nurick
08.12.2015, 18:48
Да, проблема решена. Спасибо

VVWVV
08.12.2015, 18:59
Не очень понял, почему мой последний вариант не сработал.
Хотя у меня все работало:
Код
http://ihost.pro-pawn.ru/image.php?di=0KT9

Таблица
http://ihost.pro-pawn.ru/image.php?di=8S76

UPD:
Понял. Поставил правильную кодировку для таблицы.