Mysql 4.x Linux charset UTF-8 и так в базе в кодировке UTF-8 лежат русските названия пример
1. ПРИВЕТ
2. ПриВет
3. приветделаю поиск в поиске набираю слово `ПРИВЕТ`, выдаёт только одно слово хотя должно выдавать три, с английскими названиями такого прикола нет, как с этим бороться и т.п.? тип поля `text`
как сделать чтобы русские названия были тоже регистронезависимыми как и английские?
>Mysql 4.x Linux charset UTF-8 и так в базе в кодировке UTF-8
>лежат русските названия пример
>1. ПРИВЕТ
>2. ПриВет
>3. привет
>
>делаю поиск в поиске набираю слово `ПРИВЕТ`, выдаёт только одно слово хотя
>должно выдавать три, с английскими названиями такого прикола нет, как с
>этим бороться и т.п.? тип поля `text`
>как сделать чтобы русские названия были тоже регистронезависимыми как и английские?BINARY LIKE 'привет'
>BINARY LIKE 'привет'
можно полностью команду а то что-то не идёт она у меня
вообще синтаксис команды LIKE такой
select * from ftp where file like '%привет%' то что там без процентов вообще не пойдёт темболее с каким-то binary
можно по точнее и правильно?
>>BINARY LIKE 'привет'
>можно полностью команду а то что-то не идёт она у меня
ну, например, так:SELECT * FROM ИМЯ_ТАБЛИЦЫ WHERE BINARY(ИМЯ_ПОЛЯ) LIKE 'привет'
>>>BINARY LIKE 'привет'
>>можно полностью команду а то что-то не идёт она у меня
>
>
>ну, например, так:
>
>SELECT * FROM ИМЯ_ТАБЛИЦЫ WHERE BINARY(ИМЯ_ПОЛЯ) LIKE 'привет'
ха, действительно что-то не регистрозависимо получается даже с BINARY... В тройке работало на ура, сейчас посмотрю, что тут можно сделать
>>>>BINARY LIKE 'привет'
>>>можно полностью команду а то что-то не идёт она у меня
>>
>>
>>ну, например, так:
>>
>>SELECT * FROM ИМЯ_ТАБЛИЦЫ WHERE BINARY(ИМЯ_ПОЛЯ) LIKE 'привет'
>
>
>ха, действительно что-то не регистрозависимо получается даже с BINARY... В тройке работало
>на ура, сейчас посмотрю, что тут можно сделатьМожет, просто
SELECT * FROM table WHERE UCASE(field) = "ПРИВЕТ";
?
>>>>>BINARY LIKE 'привет'
>>>>можно полностью команду а то что-то не идёт она у меня
>>>
>>>
>>>ну, например, так:
>>>
>>>SELECT * FROM ИМЯ_ТАБЛИЦЫ WHERE BINARY(ИМЯ_ПОЛЯ) LIKE 'привет'
>>
>>
>>ха, действительно что-то не регистрозависимо получается даже с BINARY... В тройке работало
>>на ура, сейчас посмотрю, что тут можно сделать
>
>Может, просто
>SELECT * FROM table WHERE UCASE(field) = "ПРИВЕТ";
>?нужно ещё такие же свойства как у LIKE, потому что в строке может быть хоть где этот ПРИВЕТ быть, пример выше это если строка равна полностью запросу
всё что ли все мысли изсякли у вас всех?
>всё что ли все мысли изсякли у вас всех?
неужели
UCASE(field) = UCASE('привет') не работает?
>>всё что ли все мысли изсякли у вас всех?
>
>
>неужели
>UCASE(field) = UCASE('привет') не работает?можно целиком команду?
может плохо обьяснил, обьясняю снова ещё раз
есть записи в которых присутсвтует слово 'привет' в разных регистрах, т.е. 'Приет' 'ПРИВЕТ' 'привет' 'ПривеТ' когда я делаю запрос на слово 'привет' выборка происходит только той строчки которая конкретно совпадает с запросом, а мне нужно чтобы в независимости оттого что введенео, короче регистронезависимость сделать, т.е. пример сноваselect * from ftp where file like 'Привет'
должно выбраться > 'Привет' 'ПРИВЕТ' 'привет' 'ПривеТ'
или
select * from ftp where file like 'привет'
должно выбраться > 'Привет' 'ПРИВЕТ' 'привет' 'ПривеТ'и т.п.
а у меня сейчас работает так
select * from ftp where file like 'Привет'
выводиться только та запись где совпадает с регитсром 'Привет'как сделать чтобывыводилось всё со словом привет?
идём дальше вот это в perl на русское на распространяеться LC() UC() на английсое тока так на русское нет, может что-то не так в локале? или где-нить ещё?
>идём дальше вот это в perl на русское на распространяеться LC() UC()
>на английсое тока так на русское нет, может что-то не так
>в локале? или где-нить ещё?
use locale;
>>идём дальше вот это в perl на русское на распространяеться LC() UC()
>>на английсое тока так на русское нет, может что-то не так
>>в локале? или где-нить ещё?
>
>
>use locale;
не помогло
по моему проблема исключительно в кодировке Mysql или ее преобразовании, локаль тут не при чем.
Пробовал делать запрос каким нибудь альтернативным способом? через phpmyadmin например или с консоли mysql ? если результат тот же, то скорее всего проблема в кодировках mysql, если же выдаются все 3 результата то в преобразовании кодировок.
советую обратиться к документации по теме:
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.htmlу меня кодировка в базе utf8, сопоставление utf8_general_ci, поиск регистронезависимый без проблем.
сделал запрос через 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
----------------------------------------------------
значит у тебя в таблице ftp сопоставление с latin1_swedish_ci, нужно исправить на utf8_general_ci и все должно быть ок
>значит у тебя в таблице ftp сопоставление с latin1_swedish_ci, нужно исправить на
>utf8_general_ci и все должно быть октолько что поставил на то что ты сказал в итоге испортилась везде буква Я и буква С, Искать продолжает так же криво
а где вообще задаётся в конфиге какая по умолчанию должна быть кодировка для таблиц?
повторю ссылочку
http://dev.mysql.com/doc/refman/5.0/en/charset-server.html
по ссылке описаны параметры запуска сервера для смены кодировки по умолчанию.судя по тому что там написано, у тебя по настройки по умолчанию, то есть кодировка latin1 и сопоставление с latin1_swedish_ci либо перенес таблицу с какого то тестового сервера с неверными настройками кодировок.
Возможно стоит сделать экспорт данных из таблицы, создать новую с верными кодировками и импортнуть туда. Не знаю правда насколько это поможет и насколько это рационально, сам такого не делал
вобщем вообще что-то всё поломалось, сменил кодировку на utf8 и utf8_general_ci во первых во всей базе исковеркались буквы С и Я Ё Й.
Причём я думал что исковеркались только которые там были, но когда я добавлял новые записи он тут же подтирал эти буквы, фигня какая-то вобщем,
во вторых поиск так же тупой, в третьих mysqld перестал киляться скриптом тока через kill
>вобщем вообще что-то всё поломалось, сменил кодировку на utf8 и utf8_general_ci во
>первых во всей базе исковеркались буквы С и Я Ё Й.
это меня не удивляет
>Причём я думал что исковеркались только которые там были, но когда я
>добавлял новые записи он тут же подтирал эти буквы, фигня какая-то
что значит подтирал буквы, не понял.. и вопрос: как добавлял записи в базу? через PMA?
>вобщем,
>во вторых поиск так же тупой, в третьих mysqld перестал киляться скриптом
>тока через kill
скрипт подправить надоПокажи что говорят (через тот же интерфейс, что ты добавляешь новые записи и они при этом портятся) следующие запросы:
SELECT CHARSET('привет');
SELECT DISTINCT CHARSET(file) FROM ftp;
SELECT COLLATION('привет');
SELECT DISTINCT COLLATION(file) FROM ftp;
>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_ci1. делал через 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 кодировку?
сделал вот ещё что: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, только как его туда переветси?
В чем проблема непонятно, вроде перезапуск сервера как выше ДОЛЖЕН изменить кодировку сервера..
И кстати он ее изменил.Сейчас как я понимаю проблема в том что соединение открывается в 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_ru2. C mysql.com Ref.Man:
SET NAMES 'charset_name'
SET CHARACTER SET charset_nameSET NAMES 'cp1251' tells the server “future incoming messages from this client are in character set cp1251.”
или в приблизительном переводе на русский: SET NAMES 'cp1251' сообщает серверу что все последующие входящие сообщения от этого клиента будут приходить в кодировке cp1251Pheonix, будь я на твоем месте, перекомпилировал бы MySQL с нужной кодировкой по умолчанию, лишние бы отключил. Если сайт русскоязычный и документы в кодировке cp1251, возможно, лучшим вариантом будет использовать именно эту кодировку.
Извините, на этом из обсуждения выпадаю
>В чем проблема непонятно, вроде перезапуск сервера как выше ДОЛЖЕН изменить кодировку
>сервера..
>И кстати он ее изменил.
>
>Сейчас как я понимаю проблема в том что соединение открывается в 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, всё равно спасибо за советы
прикол в том что я только что загнал в эту БД названия в кодировке cp1251 и они прекрасно искались регисро независимым поиском, короче что -то значит в UTF-8 не лады