SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 19.04.2012 09:39:11

yok
Участник
Зарегистрирован: 24.03.2010
Сообщений: 13

Проблема поиска с учетом регистра в русских

База на сеносе 5.5,

[root@sunport ~]# rpm -qa | grep mysql
mysql-devel-5.0.77-4.el5_4.2
mysql-connector-odbc-3.51.26r1127-1.el5
mysql-test-5.0.77-4.el5_4.2
mysql-5.0.77-4.el5_4.2
mysql-server-5.0.77-4.el5_4.2
mysql-bench-5.0.77-4.el5_4.2
php-mysql-5.1.6-27.el5

C локалью ничего не делалось, как поставил систему так и работаю в ней.

[root@sunport ~]# locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

В терминале русские пишутся, но они как то не нужны там были. Но когда пытаюсь через терминал в запросе использовать русские, ничего не получается , каракули, постояно вместо букв. В редакторе VI пишу и русские и английские, проблем нет.. Вопрос в другом, это общая картина.

mysql> select * from kontra where kontora like '%Щ�АО%';
Empty set (0.00 sec)

mysql> select * from kontra where kontora like '%������%';
Empty set (0.00 sec)

mysql> select * from kontra where kontora like '%Щ�ОАО%';
Empty set (0.00 sec)

mysql> ну и дела.

C английскими все нормально.

mysql> select * from kontra where kontora like '%ne%';
+-----+---------+------+-------------+-------+------+-------------+-------+-----------+----------+---------+------+---------+-------------+
| id  | kontora | town | dolzhnost_1 | fio_1 | fax  | dolzhnost_2 | fio_2 | telwork_2 | telsot_2 | email_2 | site | bg_cell | shift_color |
+-----+---------+------+-------------+-------+------+-------------+-------+-----------+----------+---------+------+---------+-------------+
| 173 | New     |      |             |       |      |             |       |           |          |         |      |         |             |
+-----+---------+------+-------------+-------+------+-------------+-------+-----------+----------+---------+------+---------+-------------+
1 row in set (0.00 sec)

mysql>

ПРОБЛЕМА: в том, что я хочу поиск без учета регистра, если в базе запись ОАО , то при поиске ОАО все нормально, а если я передам оао, то уже ничего не находит.
Пробовал я и

SELECT * FROM `kontra` WHERE UPPER(`kontora`) LIKE UPPER('%$searchcontora%');

по разному пытался, не получается по русским.

В коде после подключения к базе посоветовали
mysql_query('SET NAMES UTF8 COLLATE utf8_general_ci');

Но тогда вообще выводятся одни каракули.

В чем проблема? Как ее решить?

Отредактированно yok (19.04.2012 09:41:19)

Неактивен

 

#2 19.04.2012 14:57:56

ZicoRio
Завсегдатай
Зарегистрирован: 30.04.2009
Сообщений: 31

Re: Проблема поиска с учетом регистра в русских

Какая кодировка таблиц (и collation в том числе)?
Какие значения переменных:
character_set_client
character_set_connection
character_set_database
character_set_filesystem
character_set_results
character_set_server
character_set_system
collation_connection
collation_database
collation_server

Эти значения и дадут ответы на все подобные вопросы.

Неактивен

 

#3 20.04.2012 09:44:15

yok
Участник
Зарегистрирован: 24.03.2010
Сообщений: 13

Re: Проблема поиска с учетом регистра в русских

Сразу после подключения к мускулу выполняю запросы:

mysql> show variables like "character_set_client";
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| character_set_client | utf8  |
+----------------------+-------+
1 row in set (0.02 sec)

mysql> show variables like "character_set_connection";
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| character_set_connection | utf8  |
+--------------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like "character_set_database";
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| character_set_database | utf8  |
+------------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like "character_set_filesystem";
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_filesystem | binary |
+--------------------------+--------+
1 row in set (0.01 sec)

mysql> show variables like "character_set_result";
Empty set (0.00 sec)

mysql> show variables like "character_set_results";
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| character_set_results | utf8  |
+-----------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like "character_set_server";
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| character_set_server | utf8  |
+----------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like "character_set_system";
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| character_set_system | utf8  |
+----------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like "collation_connection";
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
+----------------------+-----------------+
1 row in set (0.00 sec)

mysql> show variables like "collation_database";
+--------------------+-----------------+
| Variable_name      | Value           |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0.00 sec)

mysql> show variables like "collation_server";
+------------------+-----------------+
| Variable_name    | Value           |
+------------------+-----------------+
| collation_server | utf8_general_ci |
+------------------+-----------------+
1 row in set (0.00 sec)

Но вчера я добавлял в файл выделенные строки, но все равно поиск без учета регистра для русских не работает.


[root@sunport ~]# cat /etc/my.cnf
[mysqld]
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci


datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[client]
default-character-set=utf8
[/b]

скажите пожалуйста а в какой таблице эти значения посмотреть и для какой базы они соответственно, некоторые я так понял можно определить на уровень базы. Или где почитать можно русскую инфо.

Да и в каждой таблице для поля стоит collation

[root@sunport ~]# mysqlshow ci kontra -uroot -pkdxsr
Database: ci  Table: kontra
+-------------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| Field       | Type         | Collation       | Null | Key | Default | Extra | Privileges                      | Comment |
+-------------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| id          | mediumint(9) |                 | NO   | PRI |         |       | select,insert,update,references |         |
| kontora     | varchar(100) | utf8_general_ci | YES  |     |         |       | select,insert,update,references |         |
| town        | varchar(30)  | utf8_general_ci | YES  |     |         |       | select,insert,update,references |         |
| dolzhnost_1 | varchar(20)  | utf8_general_ci | YES  |     |         |       | select,insert,update,references |         |
| fio_1       | varchar(60)  | utf8_general_ci | YES  |     |         |       | select,insert,update,references |

Отредактированно yok (20.04.2012 09:48:14)

Неактивен

 

#4 23.04.2012 18:13:38

ZicoRio
Завсегдатай
Зарегистрирован: 30.04.2009
Сообщений: 31

Re: Проблема поиска с учетом регистра в русских

Чудес не бывает.
Где-то что-то вы не то смотрели или умолчали.
Регистрозависимый поиск в utf8 может быть только при использовании collation = utf8_binary.
При использовании utf8_general поиск регистроНЕзависимый (поэтому он и назван _ci).

Откройте таблицу в phpmyadmin-e там нагляднее все видно.

Неактивен

 

Board footer

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