LINUX.ORG.RU
ФорумAdmin

mysql перевести на utf8

 ,


0

1

Помогите подправить my.cnf так, чтобы полностью перевести работу с mysql на utf8.

если раскоментировать #default-character-set=utf8 в секции [mysqld], то возникает ошибка

l$ sudo /etc/init.d/mysql restart
[ ok ] Stopping MySQL database server: mysqld.
[FAIL] Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!

[client]
port		= 3306
socket		= /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket		= /var/run/mysqld/mysqld.sock
nice		= 0
[mysqld]
#default-character-set=utf8
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
lc-messages-dir	= /usr/share/mysql
skip-external-locking
bind-address		= 127.0.0.1
key_buffer		= 16M
max_allowed_packet	= 16M
thread_stack		= 192K
thread_cache_size       = 8
myisam-recover         = BACKUP
query_cache_limit	= 1M
query_cache_size        = 16M
[mysqldump]
quick
quote-names
max_allowed_packet	= 16M
[mysql]
default-character-set=utf8
[isamchk]
key_buffer		= 16M
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     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

Версия

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 44
Server version: 5.5.35-0+wheezy1 (Debian)

Ответ на: комментарий от at

Спасибо! Везде стало utf8, но кириллица не передается ни из клиента, ни из скрипта ???

show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| 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)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
eiler13
() автор топика
Ответ на: комментарий от at
mysql> insert into test values ('АБСДЕ');
Query OK, 1 row affected, 1 warning (0.03 sec)

mysql> select * from test;
+-------+
| name  |
+-------+
| ????? |
+-------+
1 row in set (0.00 sec)
eiler13
() автор топика
Ответ на: комментарий от eiler13

Дефолтную кодировку клинета тоже сменить надо.

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

at ★★
()

character_set_database | latin1

character_set_server | latin1

ну и чего вы хотели?

Помогите подправить my.cnf так, чтобы полностью перевести работу с mysql на utf8.

а сейчас в чём? В чём сама база? Ну сделайте дамп, сконвертируйте, переправте настройки, и лейте обратно. Или у вас БД нету? Тогда всё проще.

failed!

в логе что?

emulek
()
Ответ на: комментарий от eiler13

Везде стало utf8, но кириллица не передается ни из клиента, ни из скрипта ???

проще всего запускать клиент и скрипт прямо на локалхосте, а не удалённо. Естественно используя setlocale() (там поставьте ru_RU или что там у вас)

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

Еще раз, проблема такая - в таблицу не вставляются русские буквы (локаль utf8):

mysql> insert into test values ('ТЕСТ');
Query OK, 1 row affected, 1 warning (0.09 sec)

mysql> select * from test;
+-------+
| name  |
+-------+
| ????? |
| ????? |
| ????  |
+-------+
3 rows in set (0.02 sec)

в скрипте так пытаюсь выполнить вставку
cursor.execute("SET NAMES utf8;")
cursor.execute("INSERT INTO  ...

при этом, конфиг:

$ sudo cat my.cnf 
[client]
default-character-set=utf8
port		= 3306
socket		= /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket		= /var/run/mysqld/mysqld.sock
nice		= 0
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake
##
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
lc-messages-dir	= /usr/share/mysql
skip-external-locking
bind-address		= 127.0.0.1
key_buffer		= 16M
max_allowed_packet	= 16M
thread_stack		= 192K
thread_cache_size       = 8
myisam-recover         = BACKUP
query_cache_limit	= 1M
query_cache_size        = 16M
[mysqldump]
quick
quote-names
max_allowed_packet	= 16M
[mysql]
#
[isamchk]
key_buffer		= 16M

ну и

mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| 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)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.01 sec)

возможно вот это нужно

$ 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=

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

При создании таблицы добавил

DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci
кириллица заработала.

Но, мне требуется перевести чтобы по умолчанию поддерживалось utf8. Это, вообще, возможно?

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

То есть у базы осталась старая кодировка, т.к. character-set-server меняет только кодировку сервера.

Если база пустая можно выполнить

ALTER DATABASE test DEFAULT CHARACTER SET utf8;
и то же самое для таблиц.

Если есть данные, то, ИМХО, это удобней делать через mysqldump

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

Спасибо! Это помогло, на базе созданной с нуля пошло.

P.S. странно, что только my.cnf не хочет конфигурироваться.

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

если не указан чарсет базы, он создаётся как в конфиге (_base которое), а таблицы — по базе. Проверить можно SHOW CREATE TABLE таблица и т.п.

конечно всё можно переделать. Через дамп тоже можно переделать. Т.е. в дампе надо проверять, какой она чарсет сохраняет.

emulek
()
Ответ на: комментарий от eiler13

P.S. странно, что только my.cnf не хочет конфигурироваться.

Это как?

at ★★
()
Ответ на: комментарий от eiler13

P.S. странно, что только my.cnf не хочет конфигурироваться.

это как это? А вы через что настраивали? Да, на клиентов он НЕ действует, точнее действует, если в конфиге клиента насильно НЕ прописывать. Лучше прописывать, тогда всё работает, даже если на сервере latin1 для клиентов по дефолту. ЕМНИП так.

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