Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > MySql и русские букв?


Автор: unkis 13.9.2005, 12:58
Ребята вот так вот я создаю таблику
Код

CREATE TABLE `film` (
  `FilmId` varchar(100) character set utf8 default NULL,
  `ID` int(11) NOT NULL auto_increment,
  `FName` varchar(100) character set cp1251 collate cp1251_ukrainian_ci default NULL,
  `FDownload` varchar(200) character set utf8 default NULL,
  `FHash` varchar(40) character set utf8 NOT NULL default '',
  `FDescription` text character set utf8,
  `FLSeed` varchar(20) character set utf8 default NULL,
  `FSize` varchar(20) character set utf8 default NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COMMENT='InnoDB free: 4096 kB'


В поле FName должны хранится русские буквы, но там вопросики, что делать?

Автор: PARROT 13.9.2005, 15:06
setlocale(LC_ALL, "ru_RU.CP1251");

Автор: Бонифаций 15.9.2005, 08:12
Цитата(unkis @ 13.9.2005, 12:58)
Ребята вот так вот я создаю таблику
Код

CREATE TABLE `film` (
  `FilmId` varchar(100) character set utf8 default NULL,
  `ID` int(11) NOT NULL auto_increment,
  `FName` varchar(100) character set cp1251 collate cp1251_ukrainian_ci default NULL,
  `FDownload` varchar(200) character set utf8 default NULL,
  `FHash` varchar(40) character set utf8 NOT NULL default '',
  `FDescription` text character set utf8,
  `FLSeed` varchar(20) character set utf8 default NULL,
  `FSize` varchar(20) character set utf8 default NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COMMENT='InnoDB free: 4096 kB'


В поле FName должны хранится русские буквы, но там вопросики, что делать?

Надо еще настроить клиентскую часть.
Первым делом выполни запрос

SET NAMES CP1251;

(вместо cp1251 - конечно поставь свой charset, который на клиентской машине)

Автор: Mal Hack 15.9.2005, 13:03
Цитата(PARROT @ 13.9.2005, 16:06)
setlocale(LC_ALL, "ru_RU.CP1251");

Это локаль для PHP...

А вообще поиск рулит.
http://forum.vingrad.ru/index.php?showtopic=58170&view=getnewpost

Автор: onsh76 4.6.2006, 06:48
Теперь моя очередь раскрутить наболевшую тему...  smile 
Итак, что имеем: 
Сервер: 5.0.21 на виндах ХР
Дефолтовая кодировка сервера: utf-8;
Создал базу в кодировке utf-8;
Создал таблицу типа InnoDb в кодировке utf-8.

В  notepad-e набил вот такой вот стэйтмент и сохранил его в файле с кодировкой utf-8.
Делаю: copy statement from open file and paste it to the mysql console:
Код

mysql> INSERT INTO dept (id, grad_id, code, name, sort_order, status)
    ->   VALUES (1, 1, "1971_7", "Просто тестовое значение..." , "1971_7", 0);
ERROR 1406 (22001): Data too long for column 'name' at row 1


Результат видите выше. 
Для подтверждения привожу ниже значения env.variables сервака:

Код

 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              | C:\mysql.5.0.21\share\charsets\
 collation_connection            | utf8_general_ci
 collation_database              | utf8_general_ci
 collation_server                | utf8_general_ci


Оговорюсь сразу: конфиг.файл сервака подправить не смогу - хостер не разрешает. По дефалту сервак и все базы выставлены на utf-8, и меня лично это вполне устраивает, данных не очень много, экономить нет смысла.

Спасибо за помощь, коллеги! 

Автор: igorold 5.6.2006, 07:23
а можно посмотреть описание полей id, grad_id, code, name, sort_order, status ??? 

Автор: Ignat 5.6.2006, 09:09
Цитата(onsh76 @  4.6.2006,  07:48 Найти цитируемый пост)
and paste it to the mysql console

А SSH-клиент, в котором открыта консоль, тоже работает в UTF-8   smile  

Автор: onsh76 5.6.2006, 09:27
igorold, 
Ignat, 
Спасибо за заботу. Прилагаю то, что упустил.
Значит все описанное выше уместно для моего домашнего компа, т.е. mysql client использовался под виндовским шеллом (  известным также как дос- command prompt) и соответственно  SSH-client не использовался. У хостера нет такой фичи, как ssh соединений, только telnet. Вот что интересно, я законнектился с помощью putty утилиты посредством телнет-а к хостеру, вызвал mysql, создал таблицу:  

Код

CREATE TABLE if not exists dept
(
   id                        INT                            not null AUTO_INCREMENT,
   grad_id                   INT                            not null,
   code                      VARCHAR(30)                    not null,
   name                      VARCHAR(250)                   not null,
   sort_order                VARCHAR(50),
   status                    INT,
   ext_ref                   VARCHAR(500),
   primary key (id),
   unique (code)
   
)ENGINE=INNODB DEFAULT CHARSET=utf8;


Утилита putty была выставлена на utf-8 (Window->Translation). Открыл файлик сохраненный в utf-8, в котором сохранил данные для загрузки в таблицу, copy & paste insert statement (смотри выше мой пост), commit, далее выборка из таблицы  и  нет проблем - все работает пучком .... И у меня и у хостера сервак и база создана в utf-8, только хостинг бежит на linux-e, а дома у меня виндовоз. 

В чем же дело-то - в виндах что-ли?   

Автор: Ignat 5.6.2006, 09:35
Цитата(onsh76 @  5.6.2006,  10:27 Найти цитируемый пост)
В чем же дело-то - в виндах что-ли?  

Ага... Если быть точным - в 866 кодировке досшелла =))

если хочется выполнить тоже самое на винде, то можно редиректом stdin:

Код

mysql -u root -p --database=mydatabase < statement.sql
 

Автор: onsh76 5.6.2006, 10:22
Ignat, 

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

Единственное - маленькая проблемка в вопросе тестирования: через веб приложение написанное на Java, я вижу контент в требуемой кодировке через броузер.  Ну и опять же, через виндовский шелл - кракозяблики, несмотря на то, что после логина я выполнил вот это:

Код

SET NAMES 'utf8'; 


Опять прелести от мелкомягких, что-ли? Какой же клиент лучше использовать тогда? 

Автор: Ignat 5.6.2006, 10:29
Цитата(onsh76 @  5.6.2006,  11:22 Найти цитируемый пост)
добавь себе плюсик в репу

Не умею  smile 

Цитата(onsh76 @  5.6.2006,  11:22 Найти цитируемый пост)
Опять прелести от мелкомягких, что-ли?

Это всё к вопросу о кодировке cp866.

Цитата(onsh76 @  5.6.2006,  11:22 Найти цитируемый пост)
Какой же клиент лучше использовать тогда?  

Не знаю... У меня разработка преимущественно на *nix'ах, там этих проблем нет  smile 
 

Автор: onsh76 5.6.2006, 12:36
Цитата(Ignat @ 5.6.2006,  10:29)
Цитата(onsh76 @  5.6.2006,  11:22 Найти цитируемый пост)
добавь себе плюсик в репу

Не умею  smile 


Сразу видно - скромный парень  smile . 
Свой вклад я внес,  за тебя похлопотал твоему коллеге по форуму.

Я думаю есть смысл добавить в FAQ то, с чем я боролся - глядишь поможет еще кому-нить... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)