LINUX.ORG.RU
решено ФорумAdmin

Кириллица в MySQL


0

1

Доброго времени суток

Создаю таблицу, не важно какуюю

create table if not exists user_group (
        ug_id int not null auto_increment,
        ug_name varchar(200) not null,
        constraint ug_id_pk 
                primary key (ug_id),
        unique index ug_name_idx (ug_name ASC)
) ENGINE = INNODB;

затем добавляю две записи

insert into user_group (ug_id, ug_name)
values (1, 'Администратор');
insert into user_group (ug_id, ug_name)
values (1, 'Пользователь');

затем делаю запрос

mysql> select * from user_group;
+-------+---------------+
| ug_id | ug_name       |
+-------+---------------+
|     1 | ????????????? |
|     2 | ????????????  |
+-------+---------------+
2 rows in set (0.00 sec) 

кодировка у меня вот такая

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| 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.00 sec)

mysql> SHOW COLLATION like 'utf%';
+--------------------+---------+-----+---------+----------+---------+
| Collation          | Charset | Id  | Default | Compiled | Sortlen |
+--------------------+---------+-----+---------+----------+---------+
| utf8_general_ci    | utf8    |  33 | Yes     | Yes      |       1 |
| utf8_bin           | utf8    |  83 |         | Yes      |       1 |
| utf8_unicode_ci    | utf8    | 192 |         | Yes      |       8 |
| utf8_icelandic_ci  | utf8    | 193 |         | Yes      |       8 |
| utf8_latvian_ci    | utf8    | 194 |         | Yes      |       8 |
| utf8_romanian_ci   | utf8    | 195 |         | Yes      |       8 |
| utf8_slovenian_ci  | utf8    | 196 |         | Yes      |       8 |
| utf8_polish_ci     | utf8    | 197 |         | Yes      |       8 |
| utf8_estonian_ci   | utf8    | 198 |         | Yes      |       8 |
| utf8_spanish_ci    | utf8    | 199 |         | Yes      |       8 |
| utf8_swedish_ci    | utf8    | 200 |         | Yes      |       8 |
| utf8_turkish_ci    | utf8    | 201 |         | Yes      |       8 |
| utf8_czech_ci      | utf8    | 202 |         | Yes      |       8 |
| utf8_danish_ci     | utf8    | 203 |         | Yes      |       8 |
| utf8_lithuanian_ci | utf8    | 204 |         | Yes      |       8 |
| utf8_slovak_ci     | utf8    | 205 |         | Yes      |       8 |
| utf8_spanish2_ci   | utf8    | 206 |         | Yes      |       8 |
| utf8_roman_ci      | utf8    | 207 |         | Yes      |       8 |
| utf8_persian_ci    | utf8    | 208 |         | Yes      |       8 |
| utf8_esperanto_ci  | utf8    | 209 |         | Yes      |       8 |
| utf8_hungarian_ci  | utf8    | 210 |         | Yes      |       8 |
+--------------------+---------+-----+---------+----------+---------+
21 rows in set (0.00 sec) 

Помогите увидеть кириллицу в запросе

Заранее спасибо

set names utf8

anonymous ()
Ответ на: комментарий от Pinkbyte
[mysqld]

##################
skip-character-set-client-handshake
default-character-set=utf8
init-connect='SET NAMES utf8'
default-collation=utf8_general_ci

#######################
#
# * Basic Settings
#
user		= mysql
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
port		= 3306
basedir		= /usr
datadir		= /var/lib/mysql
tmpdir		= /tmp
language	= /usr/share/mysql/english
skip-external-locking

машина является одновременно клиетом и сервером кодировка везде utf8

saidmir ()
Ответ на: комментарий от leave
saidmir@saidmir:~$ locale
LANG=ru_RU.UTF-8
LANGUAGE=
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
saidmir@saidmir:~$ 
saidmir ()
Ответ на: комментарий от saidmir

посмотри какая кодировка стоит для базы (USE mydatabase; а потом show variables like 'char%';). Создай новые записи и потом прочитай. Я подозреваю, что ты в базу внес данные в неверной кодировке. На всякий случай тебе привожу пример my.cnf (centos6)

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#character-set-server = utf8
#character-set-database = utf8
default-character-set = utf8

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[client]
default-character-set = utf8

Обрати внимание на клиента.

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

не работает потому, что вот так да

mysql> use Phone_list;
Database changed
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| 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     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql> 

хотя в конфиге прописал вот так

saidmir@saidmir:~$ sudo cat /etc/mysql/my.cnf 
[mysqld]

################## 
skip-character-set-client-handshake 
default-character-set=utf8 
init-connect='SET NAMES utf8' 
default-collation=utf8_general_ci

####################### 
# # * Basic Settings # user = mysql 
pid-file = /var/run/mysqld/mysqld.pid 
socket = /var/run/mysqld/mysqld.sock 
port = 3306 
basedir = /usr 
datadir = /var/lib/mysql 
tmpdir = /tmp 
language = /usr/share/mysql/english 
skip-external-locking 
...................... 
[mysqldump] 
quick quote-names max_allowed_packet = 16M

[client] 
default-character-set = utf8

[mysql] 
#no-auto-rehash # faster start of mysql but no tab completition

[isamchk] 
key_buffer = 16M

# # * IMPORTANT: Additional settings that can override those from this file! 
# The files must end with '.cnf', otherwise they'll be ignored. 
# !includedir /etc/mysql/conf.d/
saidmir ()
Ответ на: комментарий от saidmir

ну вот видишь) у тебя создана база в кодировке latin1, а остальное в utf8, поэтому и знаки вопроса. Если в базе ничего нету, то создай новую с правильной кодировкой, а иначе надо конвертировать.

andrew667 ★★★★★ ()
Ответ на: комментарий от andrew667
mysql> create database if not exists phone_list character set utf8;

mysql> grant all privileges on phone_list.* 'saidmir'@'%' indentified by '1' with grant option;

mysql> connect phone_list;
Connection id:    57
Current database: phone_list

mysql> use phone_list;
Database changed
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| 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.00 sec)

mysql> create table if not exists test_utf ( 
          t_id int auto_increment, 
          t_q varchar(200) not null, 
          constraint t_id_pk 
               primary key (t_id) 
);

mysql> insert into test_utf (t_id, t_q) 
values (1, 'Сагит Мирвалиев');

mysql> select * from test_utf;
+------+-------------------------------+
| t_id | t_q                           |
+------+-------------------------------+
|    1 | Сагит Мирвалиев               |
+------+-------------------------------+
1 row in set (0.00 sec)

mysql> 

Спасибо огромное всё заработало

Благодаря вам теперь я знаю как правильно создавать базы данных

Тема закрыта

saidmir ()
14 ноября 2014 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.