Alex Kuklin ([info]alexkuklin) wrote in [info]ru_linux,

mysql 5 и utf в debian/testing

Найдены грабли - в debian/testing (и наверное не только) mysqld собран с default charset latin1, что приводит к потере данных при загрузке дампов в utf8 независимо от настроек конкретной базы.

Лекарство:

character_set_server = utf8
collation_server = utf8_general_ci

в разделе [mysqld] в /etc/mysql/my.cnf

о баге доложил, номер еще не получил.

  • Post a new comment

    Error

    Your reply will be screened

    Your IP address will be recorded 

  • 21 comments

[info]vilgeforce

January 15 2007, 14:55:09 UTC 5 years ago

Хм... Насколько я помню, та же фигня в FC5. Правда, дампы в UTF8 у меня как раз заливались в базу.

[info]visir

January 15 2007, 15:09:22 UTC 5 years ago

а разве где-то по-другому ?

[info]ex_ex_aim11

January 15 2007, 15:51:19 UTC 5 years ago

а что, в дампах не указано в какой кодировке заливать данные?

недавно бекапился с 5.1 и заливал данные в 5.0 -- всё отлично отработало.

а что кодировка latin1 по-умолчанию -- то конечно обидно, но вряд ли тут кто что сделает...

[info]alexkuklin

January 15 2007, 20:25:19 UTC 5 years ago

Бред в том, что latin1 - кодировка ХРАНЕНИЯ, т.е. при загрузке из дампа файла с utf8 все символы урезаются до latin1 вне зависимости от настроек базы.

[info]ex_ex_aim11

January 15 2007, 20:39:52 UTC 5 years ago

эм... что-то я тебя не пойму... вот смотри какой у меня был дамп:

===

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `bbbb` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;

USE `bbbb`;

DROP TABLE IF EXISTS `alias`;
CREATE TABLE `alias` (
`id` int(11) NOT NULL auto_increment,
`email` int(11) NOT NULL,
`destination` char(255) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email_2` (`email`,`destination`),
KEY `email` (`email`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

===

как видиш везде явно прописано в какой кодировке таблицы создавать

[info]alexkuklin

January 15 2007, 23:35:42 UTC 5 years ago

ага, та же фигня.
пока не прописал вышепроцитированное в my.cnf - не работало.

[info]ex_ex_aim11

January 15 2007, 23:41:49 UTC 5 years ago

ох. извиняюсь. впрочем ещё и спасибо говорю -- потому что таки на одном сервере где действительно это было важно у меня прописано, а где не очень, но могло понадобиться -- нет.

%-(

[info]alexkuklin

January 15 2007, 23:45:30 UTC 5 years ago

я вообще себе голову сломал, как так - вроде все всюду прописываю, и нихрена - одни "?"

[info]ex_ex_aim11

January 15 2007, 23:46:04 UTC 5 years ago

ну про latin1 во всех книжках написано.

[info]alexkuklin

January 15 2007, 23:49:15 UTC 5 years ago

я полагал, что достаточно указать при создании базы

[info]alexkuklin

January 15 2007, 23:48:27 UTC 5 years ago

я полагал, что достаточно указать при создании базы

[info]romik_g

January 16 2007, 08:11:16 UTC 5 years ago

Аминь, прописывал такое недели 3 назад, но почему-то подумал, что оно так нужно делать. Не задумывался, что баг.
PS: Mandriva Linux.

[info]alexkuklin

January 16 2007, 08:42:36 UTC 5 years ago

По моему мнению - баг.
Система "из коробки" должна работать с любой возможной кодировкой базы.

[info]romik_g

January 16 2007, 08:46:14 UTC 5 years ago

репортите тогда..

Deleted comment

[info]alexkuklin

January 16 2007, 11:58:38 UTC 5 years ago

выставлял.
пока mysqld был с latin1, нифига не помогало.

Deleted comment

[info]alexkuklin

January 16 2007, 12:06:12 UTC 5 years ago

а заливаете дамп в utf8 с системной кодировкой utf8?
какие параметры компиляции mysql?

Deleted comment

[info]alexkuklin

January 16 2007, 12:15:22 UTC 5 years ago

может, в unstable поправили?
сейчас соберу новый vps, протестирую

Deleted comment

[info]alexkuklin

January 16 2007, 12:23:50 UTC 5 years ago

ну, может это я идиот, не спорю.
можно попросить ИСЧЕРПЫВАЮЩИЙ список действий, которые надо сделать для заливки дампа из старого mysql (был в 1251, сконверчен в utf8 через iconv)?

[info]sanmai

January 16 2007, 14:14:26 UTC 5 years ago

в Gentoo под это дело есть USE-флаг latin1.
C ним дефолтный чарсет именно такой.

Баг ли это?..

[info]alexkuklin

January 16 2007, 14:18:21 UTC 5 years ago

буду проверять

Anonymous

April 15 2007, 10:53:52 UTC 5 years ago

опять кодировки

1. Это не баг - обходится так:
== my.cnf ==
[mysqld]
init-connect="SET NAMES utf8"
==
2. Вопрос есть еще такой - ранее мускул стоял по умолчанию, с latin1 и юзеры понасоздавали баз в latin1. Теперь поставили этот SET NAMES utf8 и старые базы, которые сделаны были в latin1 стали неправильно читаться - ???? вместо букв. Как-то это можно обойти, кроме как перезапустить мускул с latin1, слить дамп, все latin1 в дампе перебить на utf8 и залить обратно, уже в utf8? Хотелось бы сделать тоже самое, но не перезапуская mysql в latin1.
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…