SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.04.2008 13:22:06

ps
Участник
Зарегистрирован: 13.04.2008
Сообщений: 7

russian (cyrillic) UTF8: troubles in sorting, lowering, uppering chars

Mysql 4.0.45 база в UTF8 на линуксе. Сам линух тоже в UTF8. Проблемы с сортировкой, LOWER(), UPPER() текстовых (CHAR, TEXT...) полей.  за collation utf8_* из дистрибутива НЕ НАДО.  Посмотрел в сорцы: там нет данных за диапазон русских букв.
Внимание вопрос :) Есть ли у кого готовые таблицы сортировки для русского сегмента UTF8 для мускула и хаутушка как их подцепить? Буду очень признателен, а то счас рассматривается вариант патченья мускула ручками, но ведь народ живет с ним _давно_, должно ж быть пофиксено.

Неактивен

 

#2 13.04.2008 13:30:42

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: russian (cyrillic) UTF8: troubles in sorting, lowering, uppering chars

Возможно дело в версии MySQL. Пробовали ставить MySQL 5?

Неактивен

 

#3 13.04.2008 15:19:36

ps
Участник
Зарегистрирован: 13.04.2008
Сообщений: 7

Re: russian (cyrillic) UTF8: troubles in sorting, lowering, uppering chars

Sorry plz sad Разумеется 5.0.45 Очепятался sad(( Но проблема осталась: не сортируется, не изменяет регистр. Проверялось из консольного mysql. типа 'SELECT UPPER('приВЕТ'); в ответ псевдографика sad

Неактивен

 

#4 13.04.2008 17:33:30

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: russian (cyrillic) UTF8: troubles in sorting, lowering, uppering chars

Какая ОС?

Какой делали SET NAMES в консоли перед указанным запросом?

Если linux, то

Код:

[rgbeast@elf ~]$ locale
LANG=ru_RU.KOI8-R
LC_CTYPE="ru_RU.KOI8-R"
LC_NUMERIC=C
LC_TIME="ru_RU.KOI8-R"
LC_COLLATE=C
LC_MONETARY="ru_RU.KOI8-R"
LC_MESSAGES="ru_RU.KOI8-R"
LC_PAPER="ru_RU.KOI8-R"
LC_NAME="ru_RU.KOI8-R"
LC_ADDRESS="ru_RU.KOI8-R"
LC_TELEPHONE="ru_RU.KOI8-R"
LC_MEASUREMENT="ru_RU.KOI8-R"
LC_IDENTIFICATION="ru_RU.KOI8-R"
LC_ALL=
[rgbeast@elf ~]$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 5.0.22-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SET NAMES koi8r;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT UPPER('приВЕТ');
+-----------------+
| UPPER('приВЕТ') |
+-----------------+
| ПРИВЕТ          | 
+-----------------+
1 row in set (0.02 sec)

Неактивен

 

#5 14.04.2008 09:08:51

ps
Участник
Зарегистрирован: 13.04.2008
Сообщений: 7

Re: russian (cyrillic) UTF8: troubles in sorting, lowering, uppering chars

Система настроена в ru_RU.UTF-8 база в геа8 ( d CREATE DB я казал UTF-8, данные в нем же). В select  все показывается по русски, НО сортировка не работает, lower/upper  я попробовал чтоб не набирать длинный селект smile тем не м енее для данных из базы они не работают sad

Неактивен

 

#6 14.04.2008 18:07:33

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: russian (cyrillic) UTF8: troubles in sorting, lowering, uppering chars

Возможно в базе данные хранятся в неправильной кодировке. Попробуйте сделать дамп и посмотреть действительно ли данные в нем в кодировке UTF-8

Неактивен

 

#7 05.05.2008 12:43:23

ps
Участник
Зарегистрирован: 13.04.2008
Сообщений: 7

Re: russian (cyrillic) UTF8: troubles in sorting, lowering, uppering chars

Да, Вы правы. Сделал дамп и счас никак не могу понять: в какой  кодировке мускул хранит базу. Может кто знает как надо перекодировать? И как потом загнать в базу перекодированные дынные, чтоб и в базе все было правильно?

Неактивен

 

#8 05.05.2008 12:47:22

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: russian (cyrillic) UTF8: troubles in sorting, lowering, uppering chars

Пожалуйста посмотрите статьи http://sqlinfo.ru/articles/encoding/

Логика простая - в дампе в начале есть слова SET NAMES имя_кодировки, дамп является хорошим и восстанавливаемым, если
1. SET NAMES в начале дампа совпадает с кодировкой, в которой находится текст в самом дампе (если делаете даип правильной базы, то по умолчанию это UTF8)
2. В описании таблиц задана русская кодировка (DEFAULT CHARSET = имя_кодировки), причем не обязательно, чтобы она совпадала с кодировкой в п.1

Неактивен

 

#9 05.05.2008 12:47:25

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: russian (cyrillic) UTF8: troubles in sorting, lowering, uppering chars

Можно сделать преобразование столбцов, в которых хранятся ваши данные, сначала в BINARY (или BLOB), а потом опять в UTF8.
За подробностями обращайтесь к статье Паулюса:
http://sqlinfo.ru/articles/info/5.html

Неактивен

 

#10 06.05.2008 14:00:03

ps
Участник
Зарегистрирован: 13.04.2008
Сообщений: 7

Re: russian (cyrillic) UTF8: troubles in sorting, lowering, uppering chars

В дампе данные лежат в абсолютно непонятной кодировке (типа "C3 90 C2 xx"). На терминале, который настроен на utf-8 показывает белиберду. Пытался перекодировать в другие кодировки (типа recode) не нашел подходящей. Самое поганое - я не понял что за кодировка и почему мускул хранит данные в ней а не в utf-8 как я заказывал sad(( и КАК перебросить данные на другой сервак в правильной кодироваке sad(((

Неактивен

 

#11 06.05.2008 14:15:58

EugeneTM
Гуру
Зарегистрирован: 11.04.2008
Сообщений: 89

Re: russian (cyrillic) UTF8: troubles in sorting, lowering, uppering chars

Попробуй это
http://sypex.net/

Я поначалу , пока с кодировкми не разобрался, им пользовался.

Неактивен

 

#12 06.05.2008 21:23:32

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: russian (cyrillic) UTF8: troubles in sorting, lowering, uppering chars

Если сделать recode utf8..latin1 dump.sql кодировка станет понятной?

Неактивен

 

#13 07.05.2008 09:09:00

ps
Участник
Зарегистрирован: 13.04.2008
Сообщений: 7

Re: russian (cyrillic) UTF8: troubles in sorting, lowering, uppering chars

Попробовал utf8->latin1. Стало почти понятно. Но! Некоторые символы не перекодировались (перекодировались неправильно) и выскочило сообщение  'Invalid input in step UTF-8..ISO-8859-1'

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson