Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / win cp1251 utf8 е ё / 15 сообщений из 15, страница 1 из 1
08.02.2014, 07:50:14
    #38554286
Stupid_BOT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
win cp1251 utf8 е ё
Здравствуйте.
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
08.02.2014, 11:03:33
    #38554316
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
win cp1251 utf8 е ё
Stupid_BOTкодировка консоли cp1251Вы уверены?
...
Рейтинг: 0 / 0
08.02.2014, 11:21:08
    #38554321
Stupid_BOT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
win cp1251 utf8 е ё
miksoft,
запускаю cmd.exe, выполняю chcp 1251, выполняю mysql -hhost -uuser -p database.
...
Рейтинг: 0 / 0
08.02.2014, 12:40:17
    #38554342
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
win cp1251 utf8 е ё
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
08.02.2014, 13:31:30
    #38554362
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
win cp1251 utf8 е ё
Пока консоль открыта

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

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

Аналогичнё:

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
08.02.2014, 13:59:04
    #38554374
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
win cp1251 utf8 е ё
Короче хбз. Конверт и каст не вылечили. Но коды разные:

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
08.02.2014, 14:00:31
    #38554376
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
win cp1251 utf8 е ё
"типочехсум" что такое? :)

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

ЗЫ: просто мысли вслух: ё = е это уж слишком... ну да пусть с ним...
...
Рейтинг: 0 / 0
08.02.2014, 14:30:15
    #38554388
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
win cp1251 utf8 е ё
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
08.02.2014, 14:37:04
    #38554389
Stupid_BOT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
win cp1251 utf8 е ё
> deblogger,
> netwind,
>
> При чем тут CI не понял.

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

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

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


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