LINUX.ORG.RU
ФорумAdmin

Mysql иероглифы

 , ,


0

1

Стакнулся с такой проблемой когда в бд, со стороннего сервера записывается информация то вместо кириллицы иероглифы, как это исправить? Причем когда использовал другой сервер было все нормально.


вставлять данные в БД нужно в той кодировке в которой у Вас создана БД и таблицы.
CREATE DATABASE <имя_бд> DEFAULT CHARSET utf8;
CREATE TABLE .... ENGINE=MyISAM DEFAULT CHARSET=utf8;
задать правильную кодировку на консоли http://php.ru/forum/viewtopic.php?t=10103
кусок конфига my.cnf

# The following options will be passed to all MySQL clients
[client]
default-character-set = utf8
character-sets-dir = /usr/share/mysql/charsets

# Here follows entries for some specific programs


# The MySQL server
[mysqld]

character-set-server = utf8
character-sets-dir = /usr/share/mysql/charsets

Vlad-76 ★★★★
()
Последнее исправление: Vlad-76 (всего исправлений: 2)
Ответ на: комментарий от giraff

с локального сервера если грузить данные в БД все нормально?
с консоли удаленной и локальной если данные вставлять?

Vlad-76 ★★★★
()
Ответ на: комментарий от giraff

у меня тоже, видимо эта настройка не существенна

Vlad-76 ★★★★
()
Ответ на: комментарий от giraff

что это значит? каким образом вставляете данные? локально если грузить данные из файла вот так нормально грузится?
mysql -D <имя_бд> -e «LOAD DATA INFILE '/var/lib/mysql/<db_name>/текстовый_файл.csv' INTO TABLE <имя_таблицы> FIELDS TERMINATED BY ',';»
Server version: 5.5.44-cll-lve


mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql>

Vlad-76 ★★★★
()
Ответ на: комментарий от giraff

с консоли локальной нормально? с удаленной консоли нет?

Vlad-76 ★★★★
()
Ответ на: комментарий от giraff

mysql: unknown variable 'init-connect=SET NAMES utf8' mysql: unknown variable 'character-set-server=utf8'

giraff
() автор топика
Ответ на: комментарий от giraff

сделайте это

mysql> CREATE DATABASE test_utf8;
Query OK, 1 row affected (0.00 sec)

mysql> use test_utf8;
Database changed
mysql> CREATE TABLE `test1`( `name` varchar(128) ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.18 sec)

mysql> CREATE TABLE `test2`( `name` varchar(128) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO test1 (name) VALUES ("Русские буквы в кодировке utf-8");
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO test2 (name) VALUES ("Русские буквы в кодировке utf-8");
Query OK, 1 row affected (0.00 sec)

mysql> select * from test1;
+-------------------------------------------------------+
| name                                                  |
+-------------------------------------------------------+
| Русские буквы в кодировке utf-8                       |
+-------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from test2;
+-------------------------------------------------------+
| name                                                  |
+-------------------------------------------------------+
| Русские буквы в кодировке utf-8                       |
+-------------------------------------------------------+
1 row in set (0.00 sec)
у меня при этом в конфиге
[mysqld]
character-set-server = utf8
и даже без этой настройки это не повлияло на вставку данных в кодировке utf-8 в таблицу test2

Vlad-76 ★★★★
()
Последнее исправление: Vlad-76 (всего исправлений: 1)
Ответ на: комментарий от Vlad-76
mysql> CREATE DATABASE test_utf8;
Query OK, 1 row affected (0.24 sec)

mysql> use test_utf8;
Database changed
mysql> CREATE TABLE `test1`( `name` varchar(128) ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.05 sec)

mysql> CREATE TABLE `test2`( `name` varchar(128) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO test1 (name) VALUES ("Русские буквы в кодировке utf-8");
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO test2 (name) VALUES ("Русские буквы в кодировке utf-8");
Query OK, 1 row affected (0.00 sec)

mysql> select * from test1;
+-------------------------------------------------------+
| name                                                  |
+-------------------------------------------------------+
| Русские буквы в кодировке utf-8 |
+-------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from test2;
+-------------------------------------------------------+
| name                                                  |
+-------------------------------------------------------+
| Русские буквы в кодировке utf-8 |
+-------------------------------------------------------+
1 row in set (0.00 sec)

giraff
() автор топика
Ответ на: комментарий от giraff

пришлось поставить debian6 и проделать все тесты, единственный момент - пришлось настроить локаль

root@debian-6:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 47
Server version: 5.1.73-1+deb6u1 (Debian)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| 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       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

mysql>
и даже при таких настройках все тестысо вставкой данных utf-8 прошли успешно.

Vlad-76 ★★★★
()
Ответ на: комментарий от giraff

Задал эту переменную в конфиге /etc/mysql/my.cnf

[mysqld]
#
# * Basic Settings
#
character-set-server = utf8

ребутнул mysqld
получил
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql>

нигде ни какой ругани
в системе установлены пакеты
root@debian-6:/etc/mysql# dpkg -l | grep mysql
ii  libdbd-mysql-perl                  4.016-1                      Perl5 database interface to the MySQL database
ii  libmysqlclient16                   5.1.73-1+deb6u1              MySQL database client library
ii  mysql-client-5.1                   5.1.73-1+deb6u1              MySQL database client binaries
ii  mysql-common                       5.1.73-1+deb6u1              MySQL database common files, e.g. /etc/mysql/my.cnf
ii  mysql-server                       5.1.73-1+deb6u1              MySQL database server (metapackage depending on the latest version)
ii  mysql-server-5.1                   5.1.73-1+deb6u1              MySQL database server binaries and system database setup
ii  mysql-server-core-5.1              5.1.73-1+deb6u1              MySQL database server binaries
root@debian-6:/etc/mysql#

Vlad-76 ★★★★
()
Ответ на: комментарий от Vlad-76

добавил строки

 
[client]
default-character-set = utf8
character-sets-dir = /usr/share/mysql/charsets
получил
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

mysql>

в /usr/share/mysql/charsets/ упоминания про utf-8 нет

Vlad-76 ★★★★
()
Ответ на: комментарий от Vlad-76

Вот таблица которую я использую


SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


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

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

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

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

CREATE TABLE IF NOT EXISTS `sb_bans` (
  `bid` int(6) NOT NULL AUTO_INCREMENT,
  `ip` varchar(32) DEFAULT NULL,
  `authid` varchar(64) NOT NULL DEFAULT '',
  `name` varchar(128) NOT NULL DEFAULT 'unnamed',
  `created` int(11) NOT NULL DEFAULT '0',
  `ends` int(11) NOT NULL DEFAULT '0',
  `length` int(10) NOT NULL DEFAULT '0',
  `reason` text NOT NULL,
  `aid` int(6) NOT NULL DEFAULT '0',
  `adminIp` varchar(32) NOT NULL DEFAULT '',
  `sid` int(6) NOT NULL DEFAULT '0',
  `country` varchar(4) DEFAULT NULL,
  `RemovedBy` int(8) DEFAULT NULL,
  `RemoveType` varchar(3) DEFAULT NULL,
  `RemovedOn` int(10) DEFAULT NULL,
  `type` tinyint(4) NOT NULL DEFAULT '0',
  `ureason` text,
  PRIMARY KEY (`bid`),
  KEY `sid` (`sid`),
  FULLTEXT KEY `reason` (`reason`),
  FULLTEXT KEY `authid_2` (`authid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Можете дать данные для тест записи?

giraff
() автор топика
Ответ на: комментарий от giraff
mysql> INSERT INTO sb_bans (bid,ip,authid,name,created,ends,length,reason,aid,adminIp,sid,country,RemovedBy,RemoveType,RemovedOn,type,ureason)
    -> VALUES ('','10.10.10.10','authid1','Никита','1','','','устал','6','1.1.1.1','4','RU','45678','DEF','41245234','34','reason2');Query OK, 1 row affected, 3 warnings (0.00 sec)

mysql> select * from sb_bans;
+-----+-------------+---------+--------------+---------+------+--------+------------+-----+---------+-----+---------+-----------+------------+-----------+------+---------+
| bid | ip          | authid  | name         | created | ends | length | reason     | aid | adminIp | sid | country | RemovedBy | RemoveType | RemovedOn | type | ureason |
+-----+-------------+---------+--------------+---------+------+--------+------------+-----+---------+-----+---------+-----------+------------+-----------+------+---------+
|   1 | 10.10.10.10 | authid1 | Никита       |       1 |    0 |      0 | устал      |   6 | 1.1.1.1 |   4 | RU      |     45678 | DEF        |  41245234 |   34 | reason2 |
+-----+-------------+---------+--------------+---------+------+--------+------------+-----+---------+-----+---------+-----------+------------+-----------+------+---------+
1 row in set (0.00 sec)

mysql>

Vlad-76 ★★★★
()
Ответ на: комментарий от giraff

попробуйте на удаленной консоли перед выполнением INSERT выполнить

mysql> SET NAMES 'utf8';
Query OK, 0 rows affected (0.00 sec)

либо в настройках на удаленной машине в файле my.cnf задать

[client]
default-character-set = utf8

либо перед выполнением INSERT задайте переменные для кодировки

mysql> SET character_set_client='utf8';
Query OK, 0 rows affected (0.00 sec)

mysql> SET character_set_connection='utf8';
Query OK, 0 rows affected (0.00 sec)

mysql> SET character_set_results='utf8';
Query OK, 0 rows affected (0.00 sec)

mysql>

Vlad-76 ★★★★
()
Ответ на: комментарий от giraff

что значит предоставить? вы же видите в дампе все и сами.
Вы хотите расшифровать пароли? может не получиться т.к. в БД может храниться MD5 хэш пароля к примеру, а не сам пароль.

Vlad-76 ★★★★
()
Ответ на: комментарий от giraff

мне не знакома эта штука mysqloo
в консоли нет - при пересылке или при согласовании кодировок разночтения.

Vlad-76 ★★★★
()
Ответ на: комментарий от Vlad-76

Пароль я и так знаю.

Смотрите когда ввожу команду:

mysql> select * from sb_bans;
+-----+----------------+---------------------+--------------------+------------+------------+--------+------------------------------------------------------+-----+---------+-----+---------+-----------+------------+-----------+------+---------+
| bid | ip             | authid              | name               | created    | ends       | length | reason                                               | aid | adminIp | sid | country | RemovedBy | RemoveType | RemovedOn | type | ureason |
+-----+----------------+---------------------+--------------------+------------+------------+--------+------------------------------------------------------+-----+---------+-----+---------+-----------+------------+-----------+------+---------+
|   1 | 13.22 | STEAM_0:0:102848197 | Via putino patrino | 1438442032 | 1438442092 |     60 | adadывфвыфвввввввввввввввввв | 156 |         |   5 | NULL    |      NULL | NULL       |      NULL |    0 | NULL    |
|   2 | 13.22 | STEAM_0:0:102848197 | Via putino patrino | 1438442377 | 1438442437 |     60 | asdadaфывфыввф                               | 156 |         |   5 | NULL    |      NULL | NULL       |      NULL |    0 | NULL    |
+-----+----------------+---------------------+--------------------+------------+------------+--------+------------------------------------------------------+-----+---------+-----+---------+-----------+------------+-----------

Русский шрифт присудствует.

А если смотреть через phpmyadmin то: https://yadi.sk/i/fNd7yhASiDPRR

Причем на сайте видно так же как и в phpmyadmin

giraff
() автор топика
Ответ на: комментарий от giraff

попробуйте на сервере к которому удаленно подключаетесь задать настройки

init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
skip-character-set-client-handshake

Vlad-76 ★★★★
()
Ответ на: комментарий от giraff

работает вставка с удаленного сервера и соответственно корректное отображение в phpmyadmin?

Vlad-76 ★★★★
()
Последнее исправление: Vlad-76 (всего исправлений: 1)
Ответ на: комментарий от giraff

а чем нативная поддержка коннектора к Mysql в lua не устраивает?

Vlad-76 ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.