{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Блоги: заметки с тегом MySQL",
    "_rss_description": "Автоматически собираемая лента заметок, написанных в блогах на Эгее",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": false,
    "_itunes_explicit": "no",
    "home_page_url": "https:\/\/blogengine.me\/blogs\/tags\/mysql\/",
    "feed_url": "https:\/\/blogengine.me\/blogs\/tags\/mysql\/json\/",
    "icon": false,
    "authors": [
        {
            "name": "Илья Бирман",
            "url": "https:\/\/blogengine.me\/blogs\/",
            "avatar": false
        }
    ],
    "items": [
        {
            "id": "133176",
            "url": "https:\/\/bolknote.ru\/all\/3089\/",
            "title": "Внимание: MySQL считает, что буквы «ё» и «е» — одно и то же.",
            "content_html": "<p>Увы, MySQL, если выбрать кодировку Unicode, считает, что «е» и «ё» — это одно и то же. Багом это не считается, в официальной таблице, где описано <a href=\"https:\/\/web.archive.org\/web\/20110210173752\/http:\/\/www.collation-charts.org\/mysql60\/mysql604.utf8_unicode_ci.european.html\">как MySQL 6.0 сравнивает символы<\/a>, эти символы в одном ряду.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mysql&gt; set names utf8 collate utf8_unicode_ci;\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql&gt; select &#039;е&#039;=&#039;ё&#039;, &#039;ё&#039;=&#039;ѐ&#039;\\G\n*************************** 1. row ***************************\n&#039;е&#039;=&#039;ё&#039;: 1\n&#039;ё&#039;=&#039;ѐ&#039;: 1\n1 row in set (0.00 sec)<\/code><\/pre><\/pre><p>Самое печальное, это нелогичное поведение всплывает, если есть потребность перевести базу с CP1251 на UTF-8, так как в CP1251-то как раз всё хорошо:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mysql&gt; set names cp1251;\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql&gt; select &#039;е&#039;=&#039;ё&#039;, &#039;ё&#039;=&#039;ѐ&#039;\\G\n*************************** 1. row ***************************\n&#039;е&#039;=&#039;ё&#039;: 0\n&#039;ё&#039;=&#039;ѐ&#039;: 0\n1 row in set (0.00 sec)<\/code><\/pre><\/pre><p>Чем это может быть плохо? Например, у нас по какому-то текстовому полю имеется уникальный ключ. Для иллюстративности, пусть это будет словарь фамилий. Фамилии Рублев и Рублёв — разные, но MySQL так не считает (для простоты опускаю другие поля):<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mysql&gt; set names utf8 collate utf8_unicode_ci;\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql&gt; create table surname(surname varchar(255) primary key);\nQuery OK, 0 rows affected (0.07 sec)\n\nmysql&gt; insert into surname values(&#039;Рублёв&#039;);\nQuery OK, 1 row affected, 1 warning (0.00 sec)\n\nmysql&gt; insert into surname values(&#039;Рублев&#039;);\nERROR 1062 (23000): Duplicate entry &#039;Рублев&#039; for key &#039;PRIMARY&#039;<\/code><\/pre><\/pre><p>Я придумал только один способ, исправляющий это поведение (но у него есть недостаток):<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mysql&gt; create table surname(surname varchar(255) primary key collate &#039;utf8_bin&#039;);\nQuery OK, 0 rows affected (0.02 sec)\n\nmysql&gt; insert into surname values(&#039;Рублёв&#039;);\nQuery OK, 1 row affected (0.00 sec)\n\nmysql&gt; insert into surname values(&#039;Рублев&#039;);\nQuery OK, 1 row affected (0.00 sec)\n\nmysql&gt; select * from surname where surname=&#039;рублев&#039;;\nEmpty set (0.00 sec)<\/code><\/pre><\/pre><p>Я выключил case insensitive у данного столбца, явным указанием «collate». Это полностью решает проблему с «ё», но лишает нас удовольствия искать, не заботясь о совпадении регистра.<\/p>\n",
            "date_published": "2011-01-31T19:34:00+05:00",
            "date_modified": "2024-12-09T15:21:42+05:00",
            "tags": [
                "MySQL",
                "программирование"
            ],
            "author": {
                "name": "Евгений Степанищев",
                "url": "https:\/\/bolknote.ru\/",
                "avatar": "https:\/\/bolknote.ru\/pictures\/userpic\/userpic@2x.jpg?1760600028"
            },
            "_date_published_rfc2822": "Mon, 31 Jan 2011 19:34:00 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "133176",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        }
    ],
    "_e2_version": 4079,
    "_e2_ua_string": "Aegea 11.0 (v4079e)"
}