Просмотр полной версии : [Вопрос] Иероглифы в поле "password" MySQL
Написал систему регистрации, всё нормально но смущает то что в Базе данных в поле "password" вместо русских букв пишет разные Иероглифы. "Сравнение" стоит "utf8_general_ci".
http://ihost.pro-pawn.ru/image.php?di=74GW
TheMallard
08.12.2015, 13:55
Хэшируй пароли и таких проблем не будет.
Для чего??? Я задал другой вопрос а ответ получил вовсе не тот, хотел бы Хеширование паролей сделал бы.
У вас сервер отдает другую кодировку(Windows-1251, русские буквы), а MySQL сервер принимает только кодировку «utf8_general_ci». При хешировании пароля, сервер отдает латинские буквы и цифры.
Пробовал ставить сравнение на "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 */;
Пробовал ставить сравнение на "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 */;
Ты ставил когда были «Иероглифы»?
Да ставил когда были иероглифы, потом они сменились на Вопросительные знаки. Решил попробовать создать новую DB и эффект такой же
Да ставил когда были иероглифы, потом они сменились на Вопросительные знаки. Решил попробовать создать новую DB и эффект такой
Удали строку где были иероглифы, после чего, переставь кодировку в «cp_1251_general_ci», а потом снова зарегистрируй аккаунт.
Дополнительный материал на habr (http://habrahabr.ru/post/201802/)
Попробовал как ты сказал нечего не изменилось, так же Вопросительные знаки
Попробовал как ты сказал нечего не изменилось, так же Вопросительные знаки
А у вас есть запрос, который говорит базе какую кодировку использовать?
Если нет, то в OnGameModeInit напишите:
mysql_query(/* Подключение к базе данных */, "set names utf8");
mysql_query(/* Подключение к базе данных */, "set names utf8");
Об этом тоже читал на офф. форумах MySQL пробовал ставить но нечего не получается эффект остается таким же "?"
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 */;
Импортирую таблицу с вашими параметрами с кодировкой файла windows-1251:
http://ihost.pro-pawn.ru/image.php?di=6M7B
Пробую импортировать с кодировкой файла utf-8:
http://ihost.pro-pawn.ru/image.php?di=3BR3
Импортирую таблицу с вашими параметрами с кодировкой файла 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, "", "");
Решение которое предложил "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" что так усердно пытался помочь!
Тему можно закрывать!
Проблема решена?
Да, проблема решена. Спасибо
Не очень понял, почему мой последний вариант не сработал.
Хотя у меня все работало:
Код
http://ihost.pro-pawn.ru/image.php?di=0KT9
Таблица
http://ihost.pro-pawn.ru/image.php?di=8S76
UPD:
Понял. Поставил правильную кодировку для таблицы.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot