<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом MySQL</title>
<link>https://blogengine.me/blogs/tags/mysql/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Внимание: MySQL считает, что буквы «ё» и «е» — одно и то же.</title>
<guid isPermaLink="false">133176</guid>
<link>https://bolknote.ru/all/3089/</link>
<pubDate>Mon, 31 Jan 2011 19:34:00 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/3089/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Увы, MySQL, если выбрать кодировку Unicode, считает, что «е» и «ё» — это одно и то же. Багом это не считается, в официальной таблице, где описано &lt;a href="https://web.archive.org/web/20110210173752/http://www.collation-charts.org/mysql60/mysql604.utf8_unicode_ci.european.html"&gt;как MySQL 6.0 сравнивает символы&lt;/a&gt;, эти символы в одном ряду.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;mysql&amp;gt; set names utf8 collate utf8_unicode_ci;
Query OK, 0 rows affected (0.00 sec)

mysql&amp;gt; select &amp;#039;е&amp;#039;=&amp;#039;ё&amp;#039;, &amp;#039;ё&amp;#039;=&amp;#039;ѐ&amp;#039;\G
*************************** 1. row ***************************
&amp;#039;е&amp;#039;=&amp;#039;ё&amp;#039;: 1
&amp;#039;ё&amp;#039;=&amp;#039;ѐ&amp;#039;: 1
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Самое печальное, это нелогичное поведение всплывает, если есть потребность перевести базу с CP1251 на UTF-8, так как в CP1251-то как раз всё хорошо:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;mysql&amp;gt; set names cp1251;
Query OK, 0 rows affected (0.00 sec)

mysql&amp;gt; select &amp;#039;е&amp;#039;=&amp;#039;ё&amp;#039;, &amp;#039;ё&amp;#039;=&amp;#039;ѐ&amp;#039;\G
*************************** 1. row ***************************
&amp;#039;е&amp;#039;=&amp;#039;ё&amp;#039;: 0
&amp;#039;ё&amp;#039;=&amp;#039;ѐ&amp;#039;: 0
1 row in set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Чем это может быть плохо? Например, у нас по какому-то текстовому полю имеется уникальный ключ. Для иллюстративности, пусть это будет словарь фамилий. Фамилии Рублев и Рублёв — разные, но MySQL так не считает (для простоты опускаю другие поля):&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;mysql&amp;gt; set names utf8 collate utf8_unicode_ci;
Query OK, 0 rows affected (0.00 sec)

mysql&amp;gt; create table surname(surname varchar(255) primary key);
Query OK, 0 rows affected (0.07 sec)

mysql&amp;gt; insert into surname values(&amp;#039;Рублёв&amp;#039;);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql&amp;gt; insert into surname values(&amp;#039;Рублев&amp;#039;);
ERROR 1062 (23000): Duplicate entry &amp;#039;Рублев&amp;#039; for key &amp;#039;PRIMARY&amp;#039;&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Я придумал только один способ, исправляющий это поведение (но у него есть недостаток):&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;mysql&amp;gt; create table surname(surname varchar(255) primary key collate &amp;#039;utf8_bin&amp;#039;);
Query OK, 0 rows affected (0.02 sec)

mysql&amp;gt; insert into surname values(&amp;#039;Рублёв&amp;#039;);
Query OK, 1 row affected (0.00 sec)

mysql&amp;gt; insert into surname values(&amp;#039;Рублев&amp;#039;);
Query OK, 1 row affected (0.00 sec)

mysql&amp;gt; select * from surname where surname=&amp;#039;рублев&amp;#039;;
Empty set (0.00 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Я выключил case insensitive у данного столбца, явным указанием «collate». Это полностью решает проблему с «ё», но лишает нас удовольствия искать, не заботясь о совпадении регистра.&lt;/p&gt;
</description>
</item>


</channel>
</rss>