The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"регистрозависимость"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [Проследить за развитием треда]

"регистрозависимость"  
Сообщение от pheonix (ok) on 14-Фев-06, 14:02 
Mysql 4.x Linux charset UTF-8 и так в базе в кодировке UTF-8 лежат русските названия пример
1. ПРИВЕТ
2. ПриВет
3. привет

делаю поиск в поиске набираю слово `ПРИВЕТ`, выдаёт только одно слово хотя должно выдавать три, с английскими названиями такого прикола нет, как с этим бороться и т.п.? тип поля `text`
как сделать чтобы русские названия были тоже регистронезависимыми как и английские?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "регистрозависимость"  
Сообщение от mephius email(ok) on 14-Фев-06, 14:35 
>Mysql 4.x Linux charset UTF-8 и так в базе в кодировке UTF-8
>лежат русските названия пример
>1. ПРИВЕТ
>2. ПриВет
>3. привет
>
>делаю поиск в поиске набираю слово `ПРИВЕТ`, выдаёт только одно слово хотя
>должно выдавать три, с английскими названиями такого прикола нет, как с
>этим бороться и т.п.? тип поля `text`
>как сделать чтобы русские названия были тоже регистронезависимыми как и английские?

BINARY LIKE 'привет'

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "регистрозависимость"  
Сообщение от pheonix (ok) on 14-Фев-06, 14:48 
>BINARY LIKE 'привет'
можно полностью команду а то что-то не идёт она у меня

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "регистрозависимость"  
Сообщение от pheonix (ok) on 14-Фев-06, 14:52 
вообще синтаксис команды LIKE такой
select * from ftp where file like '%привет%' то что там без процентов вообще не пойдёт темболее с каким-то binary
можно по точнее и правильно?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "регистрозависимость"  
Сообщение от mephius email(ok) on 14-Фев-06, 14:56 
>>BINARY LIKE 'привет'
>можно полностью команду а то что-то не идёт она у меня


ну, например, так:

SELECT * FROM ИМЯ_ТАБЛИЦЫ WHERE BINARY(ИМЯ_ПОЛЯ) LIKE 'привет'

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "регистрозависимость"  
Сообщение от mephius email(ok) on 14-Фев-06, 15:03 
>>>BINARY LIKE 'привет'
>>можно полностью команду а то что-то не идёт она у меня
>
>
>ну, например, так:
>
>SELECT * FROM ИМЯ_ТАБЛИЦЫ WHERE BINARY(ИМЯ_ПОЛЯ) LIKE 'привет'


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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "регистрозависимость"  
Сообщение от madskull (ok) on 14-Фев-06, 15:29 
>>>>BINARY LIKE 'привет'
>>>можно полностью команду а то что-то не идёт она у меня
>>
>>
>>ну, например, так:
>>
>>SELECT * FROM ИМЯ_ТАБЛИЦЫ WHERE BINARY(ИМЯ_ПОЛЯ) LIKE 'привет'
>
>
>ха, действительно что-то не регистрозависимо получается даже с BINARY... В тройке работало
>на ура, сейчас посмотрю, что тут можно сделать

Может, просто
SELECT * FROM table WHERE UCASE(field) = "ПРИВЕТ";
?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "регистрозависимость"  
Сообщение от pheonix (ok) on 15-Фев-06, 07:34 
>>>>>BINARY LIKE 'привет'
>>>>можно полностью команду а то что-то не идёт она у меня
>>>
>>>
>>>ну, например, так:
>>>
>>>SELECT * FROM ИМЯ_ТАБЛИЦЫ WHERE BINARY(ИМЯ_ПОЛЯ) LIKE 'привет'
>>
>>
>>ха, действительно что-то не регистрозависимо получается даже с BINARY... В тройке работало
>>на ура, сейчас посмотрю, что тут можно сделать
>
>Может, просто
>SELECT * FROM table WHERE UCASE(field) = "ПРИВЕТ";
>?

нужно ещё такие же свойства как у LIKE, потому что в строке может быть хоть где этот ПРИВЕТ быть, пример выше это если строка равна полностью запросу

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "регистрозависимость"  
Сообщение от pheonix (ok) on 16-Фев-06, 07:31 
всё что ли все мысли изсякли у вас всех?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "регистрозависимость"  
Сообщение от Ilyang (ok) on 16-Фев-06, 10:25 
>всё что ли все мысли изсякли у вас всех?


неужели
UCASE(field) = UCASE('привет') не работает?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "регистрозависимость"  
Сообщение от pheonix (ok) on 16-Фев-06, 11:19 
>>всё что ли все мысли изсякли у вас всех?
>
>
>неужели
>UCASE(field) = UCASE('привет') не работает?

можно целиком команду?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "регистрозависимость"  
Сообщение от pheonix (ok) on 16-Фев-06, 11:33 
может плохо обьяснил, обьясняю снова ещё раз
есть записи в которых присутсвтует слово 'привет' в разных регистрах, т.е. 'Приет' 'ПРИВЕТ' 'привет' 'ПривеТ' когда я делаю запрос на слово 'привет' выборка происходит только той строчки которая конкретно совпадает с запросом, а мне нужно чтобы в независимости оттого что введенео, короче регистронезависимость сделать, т.е. пример снова

select * from ftp where file like 'Привет'
должно выбраться > 'Привет' 'ПРИВЕТ' 'привет' 'ПривеТ'
или
select * from ftp where file like 'привет'
должно выбраться > 'Привет' 'ПРИВЕТ' 'привет' 'ПривеТ'

и т.п.
а у меня сейчас работает так
select * from ftp where file like 'Привет'
выводиться только та запись где совпадает с регитсром 'Привет'

как сделать чтобывыводилось всё со словом привет?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "регистрозависимость"  
Сообщение от pheonix (ok) on 16-Фев-06, 11:36 
идём дальше вот это в perl на русское на распространяеться LC() UC() на английсое тока так на русское нет, может что-то не так в локале? или где-нить ещё?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

18. "регистрозависимость"  
Сообщение от madskull (ok) on 16-Фев-06, 14:50 
>идём дальше вот это в perl на русское на распространяеться LC() UC()
>на английсое тока так на русское нет, может что-то не так
>в локале? или где-нить ещё?


use locale;

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

20. "регистрозависимость"  
Сообщение от pheonix (ok) on 17-Фев-06, 10:28 
>>идём дальше вот это в perl на русское на распространяеться LC() UC()
>>на английсое тока так на русское нет, может что-то не так
>>в локале? или где-нить ещё?
>
>
>use locale;
не помогло

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "регистрозависимость"  
Сообщение от Ilyang (??) on 16-Фев-06, 12:04 
по моему проблема исключительно в кодировке Mysql или ее преобразовании, локаль тут не при чем.
Пробовал делать запрос каким нибудь альтернативным способом? через phpmyadmin например или с консоли mysql ? если результат тот же, то скорее всего проблема в кодировках mysql, если же выдаются все 3 результата то в преобразовании кодировок.
советую обратиться к документации по теме:
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

у меня кодировка в базе utf8, сопоставление utf8_general_ci, поиск регистронезависимый без проблем.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "регистрозависимость"  
Сообщение от pheonix (ok) on 16-Фев-06, 12:28 
сделал запрос через PMA я сделал
SELECT * FROM `ftp` WHERE `file` LIKE '%привет%'
и вот что он мне выдал
#1267 - Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'

что это значит?

Из PMA
----------------------------------------------------
MySQL-кодировка: UTF-8 Unicode (utf8)  
Сопоставление соединения с MySQL: utf8_general_ci
----------------------------------------------------

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "регистрозависимость"  
Сообщение от Ilyang (??) on 16-Фев-06, 13:04 
значит у тебя в таблице ftp сопоставление с latin1_swedish_ci, нужно исправить на utf8_general_ci и все должно быть ок
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

16. "регистрозависимость"  
Сообщение от pheonix (ok) on 16-Фев-06, 13:07 
>значит у тебя в таблице ftp сопоставление с latin1_swedish_ci, нужно исправить на
>utf8_general_ci и все должно быть ок

только что поставил на то что ты сказал в итоге испортилась везде буква Я и буква С, Искать продолжает так же криво
а где вообще задаётся в конфиге какая по умолчанию должна быть кодировка для таблиц?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

17. "регистрозависимость"  
Сообщение от Ilyang (??) on 16-Фев-06, 13:26 
повторю ссылочку
http://dev.mysql.com/doc/refman/5.0/en/charset-server.html
по ссылке описаны параметры запуска сервера для смены кодировки по умолчанию.

судя по тому что там написано, у тебя по настройки по умолчанию, то есть кодировка latin1 и сопоставление с latin1_swedish_ci либо перенес таблицу с какого то тестового сервера с неверными настройками кодировок.

Возможно стоит сделать экспорт данных из таблицы, создать новую с верными кодировками и импортнуть туда. Не знаю правда насколько это поможет и насколько это рационально, сам такого не делал

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

19. "регистрозависимость"  
Сообщение от pheonix (ok) on 17-Фев-06, 10:26 
вобщем вообще что-то всё поломалось, сменил кодировку на utf8 и utf8_general_ci во первых во всей базе исковеркались буквы С и Я Ё Й.
Причём я думал что исковеркались только которые там были, но когда я добавлял новые записи он тут же подтирал эти буквы, фигня какая-то вобщем,
во вторых поиск так же тупой, в третьих mysqld перестал киляться скриптом тока через kill
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

21. "регистрозависимость"  
Сообщение от Ilyang (??) on 17-Фев-06, 14:00 
>вобщем вообще что-то всё поломалось, сменил кодировку на utf8 и utf8_general_ci во
>первых во всей базе исковеркались буквы С и Я Ё Й.
это меня не удивляет
>Причём я думал что исковеркались только которые там были, но когда я
>добавлял новые записи он тут же подтирал эти буквы, фигня какая-то
что значит подтирал буквы, не понял.. и вопрос: как добавлял записи в базу? через PMA?
>вобщем,
>во вторых поиск так же тупой, в третьих mysqld перестал киляться скриптом
>тока через kill
скрипт подправить надо

Покажи что говорят (через тот же интерфейс, что ты добавляешь новые записи и они при этом портятся) следующие запросы:
SELECT CHARSET('привет');
SELECT DISTINCT CHARSET(file) FROM ftp;
SELECT COLLATION('привет');
SELECT DISTINCT COLLATION(file) FROM ftp;

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

22. "регистрозависимость"  
Сообщение от pheonix (ok) on 20-Фев-06, 07:45 
>SELECT CHARSET('привет');
CHARSET('привет')
latin1

>SELECT DISTINCT CHARSET(file) FROM ftp;
CHARSET(file)
utf8

>SELECT COLLATION('привет');
COLLATION('привет')
latin1_swedish_ci

>SELECT DISTINCT COLLATION(file) FROM ftp;
COLLATION(file)
utf8_general_ci

1. делал через PMA через, perl скрипт, через webmin - результат один и тот же;
2. команды выше сделал через webmin;
3. подтираються значит вместо букв 'ё','й','я','с' пишется ',?'.

Вобщем я увидел что у меня эта корявая кодировка осталась всётаки, а изменились только поля БД, вопорс как изменить кодировку самого сервера MySQL, отсылать http://dev.mysql.com/doc/refman/4.1/en/charset-server.html меня не надо я там уже был так и не понял как мне сменить эту кодировку, когда делаю так
/etc/init.d/mysqld stop
а потом
/usr/libexec/mysqld --set-character-server=utf8 --collation-server=utf8_general_ci
пишет что из под рута нельзя запускать MySQL, перехожу su mysql, делаю
/usr/libexec/mysqld --set-character-server=utf8 --collation-server=utf8_general_ci
всё прекрасно пропускает никаких ошибок не выдаёт, но кодировка всё равно latin1 пов сем тем запросам которые выше, т.е. ничего не изменилось, я уже если честно то зае...

Кто мне скажет прямо командами конкретно что нужно сделать чтобы перевести MySQL в utf8 кодировку?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

23. "регистрозависимость"  
Сообщение от pheonix (ok) on 20-Фев-06, 08:55 
сделал вот ещё что:

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8                       |
| character_set_results    | latin1                     |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)

и вот это
mysql> show character set;
+----------+-----------------------------+---------------------+--------+
| Charset  | Description                 | Default collation   | Maxlen |
+----------+-----------------------------+---------------------+--------+
...
| latin1   | ISO 8859-1 West European    | latin1_swedish_ci   |      1 |
...
| utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |
...
+----------+-----------------------------+---------------------+--------+
35 rows in set (0.00 sec)

так что сервер MySQL, который у меня, поддерживает utf8, только как его туда переветси?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

24. "регистрозависимость"  
Сообщение от Ilyang (??) on 20-Фев-06, 11:41 
В чем проблема непонятно, вроде перезапуск сервера как выше ДОЛЖЕН изменить кодировку сервера..
И кстати он ее изменил.

Сейчас как я понимаю проблема в том что соединение открывается в latin1, почему затрудняюсь сказать:

| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_results    | latin1                     |

Сам с таким не сталкивался, но могу дать рекомендации

1. С mysql.ru FAQ:

Q. Как обеспечить корректную работу MySQL с русскими символами при сортировке и выборке данных?
A. В /etc/my.cnf вписать в блоке [mysqld]: default-character-set=koi8_ru (или cp1251). При работе с базой можно выставить рабочую кодировку через: SET CHARACTER SET koi8_ru

2. C mysql.com Ref.Man:

SET NAMES 'charset_name'
SET CHARACTER SET charset_name

SET NAMES 'cp1251' tells the server “future incoming messages from this client are in character set cp1251.”
или в приблизительном переводе на русский: SET NAMES 'cp1251' сообщает серверу что все последующие входящие сообщения от этого клиента будут приходить в кодировке cp1251

Pheonix, будь я на твоем месте, перекомпилировал бы MySQL с нужной кодировкой по умолчанию, лишние бы отключил. Если сайт русскоязычный и документы в кодировке cp1251, возможно, лучшим вариантом будет использовать именно эту кодировку.

Извините, на этом из обсуждения выпадаю

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

25. "регистрозависимость"  
Сообщение от pheonix (ok) on 20-Фев-06, 13:42 
>В чем проблема непонятно, вроде перезапуск сервера как выше ДОЛЖЕН изменить кодировку
>сервера..
>И кстати он ее изменил.
>
>Сейчас как я понимаю проблема в том что соединение открывается в latin1,
>почему затрудняюсь сказать:
>
>| character_set_client     | latin1    
>          
>     |
>| character_set_connection | latin1        
>          
> |
>| character_set_results    | latin1      
>          
>    |
>
>Сам с таким не сталкивался, но могу дать рекомендации
>
>1. С mysql.ru FAQ:
>
>Q. Как обеспечить корректную работу MySQL с русскими символами при сортировке и
>выборке данных?
>A. В /etc/my.cnf вписать в блоке [mysqld]: default-character-set=koi8_ru (или cp1251). При работе
>с базой можно выставить рабочую кодировку через: SET CHARACTER SET koi8_ru
>
>
>2. C mysql.com Ref.Man:
>
>SET NAMES 'charset_name'
>SET CHARACTER SET charset_name
>
>SET NAMES 'cp1251' tells the server “future incoming messages from this client
>are in character set cp1251.”
>или в приблизительном переводе на русский: SET NAMES 'cp1251' сообщает серверу что
>все последующие входящие сообщения от этого клиента будут приходить в кодировке
>cp1251
>
>Pheonix, будь я на твоем месте, перекомпилировал бы MySQL с нужной кодировкой
>по умолчанию, лишние бы отключил. Если сайт русскоязычный и документы в
>кодировке cp1251, возможно, лучшим вариантом будет использовать именно эту кодировку.
>
>Извините, на этом из обсуждения выпадаю

ok спасибо, нет все файлы и вообще всё в кодировке utf8, всё равно спасибо за советы

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

26. "регистрозависимость"  
Сообщение от pheonix (ok) on 20-Фев-06, 14:01 
прикол в том что я только что загнал в эту БД названия в кодировке cp1251 и они прекрасно искались регисро независимым поиском, короче что -то значит в UTF-8 не лады
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру