Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MySQL 5.0.22-community + UTF-8, INSERT ERROR 
V
    Опции темы
new
Дата 26.7.2006, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



OS:Windows XP SP2
DB: MySQL 5.0.22
Во время конфигурации выбрал utf
status и show variables like '%char%' показывают всюду utf8;
После запроса:
Код

   insert into types values (1,'Неизвестный',7,'n');

ERROR 1406 (22001): Data long too for column 'type_name' at row 1
Код

create table types (
  id int not null, -- pk
  type_name varchar(200) not null, -- название
  price double not null, -- цена
  disabled char(1), -- если disabled = 'Y', то не показывать данный сорт в списке доступных сортов
  primary key (id)
) type=InnoDB charset=utf8;

Погуглил,вроде это баг такой... для этой версии

Все выше было как инфа для тех кто напорится на такие же грабли.
Теперь вопрос:
Посоветуйте мускул  (желательно 5ой ветки) чтобы можно было без проблем работать с utf8;

PM MAIL   Вверх
Ignat
Дата 26.7.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 21
Всего: 73



У меня стоит 5.0.18, проблем пока не наблюдал.

Добавлено @ 18:45 
Создал таблицу, вставил приведенную запись - работает.

Добавлено @ 18:51 
Гы... Получилось сгенерить такую ошибку:


Код

mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into types values (3,'Неизвестный',7,'n');
ERROR 1406 (22001): Data too long for column 'type_name' at row 1



Мораль: ставьте нормальную кодировку соединения.

Добавлено @ 18:51 
Забыл добавить, первоначально клиент работал в cp866. 


--------------------
Теперь при чем :P
PM   Вверх
new
Дата 26.7.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



Цитата(Ignat @ 26.7.2006,  18:42)
У меня стоит 5.0.18, проблем пока не наблюдал.

Добавлено @ 18:45 
Создал таблицу, вставил приведенную запись - работает.

Добавлено @ 18:51 
Гы... Получилось сгенерить такую ошибку:


Код

mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into types values (3,'Неизвестный',7,'n');
ERROR 1406 (22001): Data too long for column 'type_name' at row 1

Так все-таки получилось вставить запись или нет,что то я не понял ?
status и show variables like '%char%' показывают всюду utf8 ?
Кстати народ подключайтесь  smile Здесь решается вопрос о том можно, ли заставить работать MySQL 5.0.? c UTF-8.
Я пробывал делать инсерт из виндовой консоли,MySQL Front 3.1 и прогаммно через Hibernate2.Результат - сабжевая ошибка. 
PM MAIL   Вверх
skyboy
Дата 26.7.2006, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



вобщем, похожая ситуация: создаём таблицу. создаём с указанием стандарт-кодировки(по дефолту обычно latin1). потом в процессе работы, вспоминаем о том, что сделали чего-то не то, надо ж и русские слова хранить и т.д.. Делаем ALTER таблицы, меняем кодировку. НО! Кодировки уже созданных столбцов остались прежними! И при вставке в них не-латиницы, возникает ошибка, визуально выглядящая как "data too long". В такой ситуации решение - явно обновить кодировку у каждого столбца.

Добавлено @ 21:13 
Цитата(new @  26.7.2006,  21:09 Найти цитируемый пост)
Здесь решается вопрос о том можно, ли заставить работать MySQL 5.0.?

Не считая моих собственных ошибок(см. выше) ни разу не имел ошибок со вставкой/обновлением/выводом данных таблиц, хранящих данные в UTF. 
PM MAIL   Вверх
new
Дата 26.7.2006, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



Так я ведь специально для этого переустановил мускуль 5.0.22 и сконфигурировал его под utf8.Убедился что все выставлено путем:
Код

mysql> status;
--------------
mysql.exe  Ver 14.12 Distrib 5.0.22, for Win32 (ia32)

Connection id:          5
Current database:       coffee
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.0.22-community
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:               3306
Uptime:                 4 min 48 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       | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+

Далее создал новые базу и таблицу и даже для столбца кодировку прставил и ... обломался...
Код

mysql> create database temp character set utf8;
Query OK, 1 row affected (0.02 sec)
mysql> use temp;
Database changed
mysql> create table types (
    ->   id int not null, -- pk
    ->   type_name varchar(200) character set utf8 not null, -- название
    ->   price double not null, -- цена
    ->   disabled char(1), -- если disabled = 'Y', то не показывать данный сорт в списке доступных сортов
    ->   primary key (id)
    -> ) type=InnoDB character set utf8;
Query OK, 0 rows affected, 1 warning (0.06 sec)
mysql> insert into types values (3,'Неизвестный',7,'n');
ERROR 1406 (22001): Data too long for column 'type_name' at row 1

skyboy,если у тебя рабочая база вся в UTF-8 приведи плиз номер версии и скрипт для создания какой нить базы и таблицы. 
PM MAIL   Вверх
skyboy
Дата 26.7.2006, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



на работе. завтра.впрочем, не могу на 100% быть уверен, что .0.22. Может, старее.  
PM MAIL   Вверх
new
Дата 26.7.2006, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



Всё ребята, я все понял !!!
Проблема была в клиенте (для инсерта я использовал нативный mysql.exe и MySQL Front 3.1).А спас меня от самоубийства об стену Hibernate  smile.Сэйвинг обьекта прошел удачно,но в MySQL Front я увидел крякозябру.Тогда я думаю дай посмотрю,что в нативном клиенте - это был не русский язык ... Тут я вспомнил,что можно поменять кодировку клиентского вывода:
Код

mysql> select * from orders_info;
+----+---------------------+--------------------+------------+-----------+------+
| id | date_order          | name               | address    | phone     | cost |
+----+---------------------+--------------------+------------+-----------+------+
|  1 | 2006-07-26 22:23:05 | │Р│┐││││TБ│-│-│+TА          | │Ь│┐│-TБ││      | 555-55-55 |   16 |
+----+---------------------+--------------------+------------+-----------+------+
1 row in set (0.00 sec)

mysql> set names cp866;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from orders_info;
+----+---------------------+-----------+---------+-----------+------+
| id | date_order          | name      | address | phone     | cost |
+----+---------------------+-----------+---------+-----------+------+
|  1 | 2006-07-26 22:23:05 | Александр         | Минск        | 555-55-55 |   16 |
+----+---------------------+-----------+---------+-----------+------+
1 row in set (0.00 sec)


Я классифицировал крякозяблы и понял,что MySQL Front просто берет байтовый поток из базы и согласно таблице cp1251 отображает их.
Скорее всего дело в том,что не зарегистрированным юзерам нет возможности менять переменные окружения в MySQL Front - а по дефолту там клиентский вывод в cp1251.Вот и сказке конец,кто послушал молодец ... 

Это сообщение отредактировал(а) new - 26.7.2006, 22:50
PM MAIL   Вверх
Ignat
Дата 27.7.2006, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 21
Всего: 73



Цитата(new @  26.7.2006,  23:30 Найти цитируемый пост)
Тут я вспомнил,что можно поменять кодировку клиентского вывода:

Дык я это и имел в виду  smile  


--------------------
Теперь при чем :P
PM   Вверх
new
Дата 27.7.2006, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



А какие клиенты работают нормально с UTF-8 ?
MySQL Front у меня не зареген,там вроде поменять вывод нельзя. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0837 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.