Страница 1 из 3
Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.07, 06:49
girmate
Всегда считал что для многих языков нужно создавать кодировку в MySql
utf8_general_ci.
Однако, скачав шаблон SamDark с примером магазина
https://github.com/samdark/yii2-shop, заметил что кодировка там в таблицах
https://github.com/samdark/yii2-shop utf8_unicode_ci!
Так какую кодировку необходимо ставить? Интернет говорит что там есть нюансы при сортировке. Якобы последняя работает лучше с немецким языком и другими, но медленнее.
Можете аргументировать в чью-то пользу? Я планирую приложение со многими языками - русский/английский/немецкий/итальянский/французкий/испанский/польский и так далее, если это суть важно.
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.07, 07:03
girmate
Сразу не обратил внимание, Александр указал в комментариях (прямо в миграции - предусмотрительный
) ссылку
http://stackoverflow.com/questions/7668 ... unicode-ci, где объясняется сравнение кодировок, но там все по-английски, поэтому вопрос оставлю.
А вы какую разновидность utf8 используете в своих мультиязычных проектах?
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.07, 07:32
girmate
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.07, 10:00
rugabarbo
girmate писал(а):Тему можно закрывать.
Если можно, то закрывайте (;
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.07, 13:03
samdark
Кодировка и collation — разные понятия. Кодировка определяет то, что мы можем хранить. collation — то, как мы сравниваем символы (то есть при =, LIKE, ORDER).
Кодировку на сегодняшний день для MySQL рекомендую utf8mb4. Collation utf8mb4_unicode_ci потому что юникод расширился несколько и в utf8 не всё влезает.
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.07, 17:17
girmate
Еще сложнее стало с выбором
Если у меня куча языков (включая немецкий и японский) и мне это нужно будет сравнивать и сортировать, то мне нужно выбрать
utf8mb4_unicode_ci ?
Но для остальных полей (типа TEXT, например для правил сервиса или раздел "помощь"), мне можно ограничиться
utf8_unicode_ci?
Или же для всех таблиц поставить
utf8mb4_unicode_ci и не мучатся с выбором?
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.07, 18:11
zelenin
судя по названию, utf8_unicode_ci сделан давно и не поддерживает 4-байтные символы. После того как появилась необходимость, добавили новый коллейшн с поддержкой 4 байтов (mb4 - multibyte 4)
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.07, 18:12
girmate
И тогда ответ на предыдущий вопрос будет какой?
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.07, 18:19
zelenin
girmate писал(а):И тогда ответ на предыдущий вопрос будет какой?
я правильно понял, вопрос звучит как: какой коллейшн выбрать - без поддержки 4 байт и с поддержкой 4 байт?
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.07, 18:44
girmate
Не совсем.
Мультиязычный сайт - русский/английский/немецкий/японский. Где-то будет поиск и сортировка (адресная книга). Где-то не будет поиск и сортировка (раздел "помощь" или те же "контакты"). В каких случаях взять:
1. utf8mb4_unicode_ci;
2. utf8_unicode_ci;
3. utf8_general_ci?
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.07, 18:48
zelenin
girmate писал(а):Не совсем.
Мультиязычный сайт - русский/английский/немецкий/японский. Где-то будет поиск и сортировка (адресная книга). Где-то не будет поиск и сортировка (раздел "помощь" или те же "контакты").
какое отношение поиск и сортировка имеют к коллейшну?
girmate писал(а):
1. utf8mb4_unicode_ci;
2. utf8_unicode_ci;
3. utf8_general_ci?
я намекаю, что ответ уже есть в теме.
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.07, 18:50
girmate
Sam Dark писал(а):Кодировка и collation — разные понятия. Кодировка определяет то, что мы можем хранить. collation — то, как мы сравниваем символы (то есть при =, LIKE, ORDER).
Кодировку на сегодняшний день для MySQL рекомендую utf8mb4. Collation utf8mb4_unicode_ci потому что юникод расширился несколько и в utf8 не всё влезает.
Ну вот это я принимаю за ответ. Берем
utf8mb4_unicode_ci и не волнуемся больше по этому поводу.
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.07, 18:52
zelenin
girmate писал(а):Sam Dark писал(а):Кодировка и collation — разные понятия. Кодировка определяет то, что мы можем хранить. collation — то, как мы сравниваем символы (то есть при =, LIKE, ORDER).
Кодировку на сегодняшний день для MySQL рекомендую utf8mb4. Collation utf8mb4_unicode_ci потому что юникод расширился несколько и в utf8 не всё влезает.
Ну вот это я принимаю за ответ. Берем
utf8mb4_unicode_ci и не волнуемся больше по этому поводу.
и не забываем нормализовать юникод ПЕРЕД попаданием в БД.
https://habrahabr.ru/post/45489/
https://github.com/zelenin/string/blob/ ... former.php
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.07, 19:01
girmate
Я так и знал, что казалось бы в практически решенном вопросе "вылезет" еще какая-нибудь лабуда. И теперь живи с этим.
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.08, 01:19
samdark
Эээ... а зачем нормализовывать-то? В utf8mb4 умещается всё.
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.08, 01:21
zelenin
Sam Dark писал(а):Эээ... а зачем нормализовывать-то? В utf8mb4 умещается всё.
https://habrahabr.ru/post/262679/
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.08, 03:40
girmate
Ну ники пользователей, если их можно только на английском писать (по умолчанию), нету же смысла хранить в utf8mb4_unicode_ci ?
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.08, 03:46
zelenin
girmate писал(а):Ну ники пользователей, если их можно только на английском писать (по умолчанию), нету же смысла хранить в utf8mb4_unicode_ci ?
смысла нет, но нет смысла и разбираться в этом. Просто по дефолту mb4 везде используйте
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.08, 04:08
girmate
Ну я так и думал. Просто Вы сделали поправку на то, что у меня "по умолчанию" не может быть проекта, который выстрелит, типа зачем тебе еще париться с кодировками - бери вон ту, самую вместительную и не заморачивайся
.
Re: Кодировка символов в таблицах для мультиязычного проекта
Добавлено: 2016.09.10, 17:29
zelenin
Sam Dark писал(а):Эээ... а зачем нормализовывать-то? В utf8mb4 умещается всё.
https://meduza.io/feature/2016/09/10/on ... ez-ostatka
вот кстати яркий пример почему надо нормализовывать юникод
Скриншот для тех, у кого нормально отображается