powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / win cp1251 utf8 е ё
15 сообщений из 15, страница 1 из 1
win cp1251 utf8 е ё
    #38554286
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Windows XP SP3 RUS, кодировка консоли cp1251.
Если параметры instr() формирую на клиете, то получаю ожидаемый результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
mysql> select instr('переехаЛЛо', 'ё');
+--------------------------+
| instr('переехаЛЛо', 'ё') |
+--------------------------+
|                        0 |
+--------------------------+

Если один из параметров - значение поля, - внезапно е считается равным ё.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
mysql> select id, name, instr(name, 'ё') from attribute_alternative where instr(name, 'ё')>0 order by rand() limit 4;
+-------+-----------------------+------------------+
| id    | name                  | instr(name, 'ё') |
+-------+-----------------------+------------------+
| 86304 | тип двигателя         |               11 |
| 93329 | направленность        |                8 |
| 85271 | типочехсум            |                6 |
| 81193 | потребляемая мощность |                5 |
+-------+-----------------------+------------------+
DDL, VARABLES
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
show create table attribute_alternative\G
*************************** 1. row ***************************
       Table: attribute_alternative
Create Table: CREATE TABLE `attribute_alternative` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` longtext,
  `attribute_id` bigint(20) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  KEY `FK37A2268A71504B51` (`attribute_id`)
) ENGINE=InnoDB AUTO_INCREMENT=94436 DEFAULT CHARSET=utf8

show variables where Variable_name like '%version%' or Variable_name like '%char%';
+--------------------------+---------------------------------+
| Variable_name            | Value                           |
+--------------------------+---------------------------------+
| character_set_client     | cp1251                          |
| character_set_connection | cp1251                          |
| character_set_database   | utf8                            |
| character_set_filesystem | binary                          |
| character_set_results    | cp1251                          |
| character_set_server     | utf8                            |
| character_set_system     | utf8                            |
| character_sets_dir       | c:\mysql-5.5.28\share\charsets\ |
| innodb_version           | 1.1.8                           |
| protocol_version         | 10                              |
| slave_type_conversions   |                                 |
| version                  | 5.5.28                          |
| version_comment          | MySQL Community Server (GPL)    |
| version_compile_machine  | x86                             |
| version_compile_os       | Win32                           |
+--------------------------+---------------------------------+

Аналогичное поведение и при обычном сравнении.
Какого икса оно так?
...
Рейтинг: 0 / 0
win cp1251 utf8 е ё
    #38554316
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stupid_BOTкодировка консоли cp1251Вы уверены?
...
Рейтинг: 0 / 0
win cp1251 utf8 е ё
    #38554321
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,
запускаю cmd.exe, выполняю chcp 1251, выполняю mysql -hhost -uuser -p database.
...
Рейтинг: 0 / 0
win cp1251 utf8 е ё
    #38554342
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stupid_BOTЗдравствуйте.
Windows XP SP3 RUS, кодировка консоли cp1251.
Если параметры instr() формирую на клиете, то получаю ожидаемый результат:
Код: plaintext
1.
2.
3.
mysql> select instr('переехаЛЛо', 'ё');

Если один из параметров - значение поля, - внезапно е считается равным ё.


ну так у вас DEFAULT CHARSET=utf8. Все что вы пишете в консоли пока дойдет до обращения к индекса таблицы, сконвертируется в utf8 и там уже применяются свои правила. Где, внезапно E = Ё, потом что collation там скорее всего default collation - utf8_general_ci.
CI - это Case Insensitive. Вот все и работает как бы по-русски : 'е' равно 'ё'.
слава ежикам !
...
Рейтинг: 0 / 0
win cp1251 utf8 е ё
    #38554362
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока консоль открыта

mysql> select "ё" = "е";
+-----------+
| "ё" = "е" |
+-----------+
| 0 |
+-----------+
1 row in set (0.00 sec)

mysql>
...
Рейтинг: 0 / 0
win cp1251 utf8 е ё
    #38554366
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не прочитал, протупил с ответом.

Аналогичнё:

mysql> select instr(subject, "ё") as yo, subject from catalog_group where iden=3;
+----+---------------+
| yo | subject |
+----+---------------+
| 6 | Рабочее место |
+----+---------------+
1 row in set (0.00 sec)

mysql>
...
Рейтинг: 0 / 0
win cp1251 utf8 е ё
    #38554374
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче хбз. Конверт и каст не вылечили. Но коды разные:

mysql> select substr(subject, 6,1) as yo, ord(substr(subject, 6,1)) as cc from catalog_group where iden=3;
+----+-------+
| yo | cc |
+----+-------+
| ё | 53649 |
+----+-------+
1 row in set (0.00 sec)

тут я поменял ё на е

mysql> select substr(subject, 6,1) as yo, ord(substr(subject, 6,1)) as cc from catalog_group where iden=3;
+----+-------+
| yo | cc |
+----+-------+
| е | 53429 |
+----+-------+
1 row in set (0.00 sec)

mysql>
...
Рейтинг: 0 / 0
win cp1251 utf8 е ё
    #38554376
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"типочехсум" что такое? :)

Типа чексум?
...
Рейтинг: 0 / 0
win cp1251 utf8 е ё
    #38554383
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netwind,
спасибо. Правила сравнения действительно _general_ci.

ЗЫ: просто мысли вслух: ё = е это уж слишком... ну да пусть с ним...
...
Рейтинг: 0 / 0
win cp1251 utf8 е ё
    #38554388
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netwind,

При чем тут CI не понял. Но нашел точно такую же таблицу в 1251 и ё не нашлось

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
mysql> select instr(subject, "ё") as yo, subject from catalog_group where iden = 3;
+----+---------------+
| yo | subject       |
+----+---------------+
|  0 | Рабочее место |
+----+---------------+
1 row in set (0.00 sec)

mysql>
...
Рейтинг: 0 / 0
win cp1251 utf8 е ё
    #38554389
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> deblogger,
> netwind,
>
> При чем тут CI не понял.

Не просто CI, а utf8_general_ci .
...
Рейтинг: 0 / 0
win cp1251 utf8 е ё
    #38554392
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stupid_BOT,

В общем-то понятно что консоль влияет, но почему-то только на ё. В уникоде оно все равно не пашет, так что ё с ней.
...
Рейтинг: 0 / 0
win cp1251 utf8 е ё
    #38554397
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stupid_BOT
ЗЫ: просто мысли вслух: ё = е это уж слишком... ну да пусть с ним...
в utf8 есть две "точки зрения" на эту проблему - secondary и primary разность.
в mysql решили не усложнять язык и выбрали primary.
...
Рейтинг: 0 / 0
win cp1251 utf8 е ё
    #38554423
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> netwind,
>
> в utf8 есть две "точки зрения" на эту проблему - secondary и primary разность.
> в mysql решили не усложнять язык и выбрали primary.

Упс... Получается, что utf8_general_ci не везде одинаковая (зависит от реализации) ? Или я чего-то не понимаю, или одно из двух.
...
Рейтинг: 0 / 0
win cp1251 utf8 е ё
    #38554575
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stupid_BOT, ну проверьте в других средах, если так уж интересно.
как минимум, я обнаружил что в php используется secondary difference 11651159 , где Ё =! E, но при желании можно выбрать другое сравнение.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / win cp1251 utf8 е ё
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]