Значительно ли лучше использовать ISO-8859-1, а не UTF-8, где это возможно? - PullRequest
4 голосов
/ 07 декабря 2011

Для глобализации сценариев очень часто используется UTF-8 в качестве кодировки по умолчанию; например в HTML или кодировке по умолчанию mysql. Это также относится и к латинскому веб-сайту, в котором символы находятся в классе ISO-8859-1. Разве не выгодно использовать ISO-8859-1, когда UTF-8 символы не нужны. Под выгодным я имею в виду критически выгодный.

Моя точка зрения такова, что только 0–127 символов UTF-8 составляют 1 байт, а из 128–255 - 2 байта; где ISO-8859-1 - это 1-байтовая система. Разве это не играет решающую роль в хранении базы данных?

Ответы [ 4 ]

5 голосов
/ 07 декабря 2011

Если все, что вам нужно сейчас и навсегда, это ISO-8859-1, вы сэкономите место, используя его, хотя, вероятно, не так много, если большинство используемых символов <128. Если вам когда-либо потребуется использовать что-либо за пределами ISO -8859-1, ты будешь в мире боли. С общей точки зрения, стоимость хранения для UTF-8 намного ниже, чем стоимость реализации нескольких кодировок. </p>

4 голосов
/ 07 декабря 2011

Большинство из этих 127 UTF-8 1-байтовых символов наиболее часто используются при работе с ISO-8859-1. Давайте посмотрим здесь . Если вы используете UTF-8, вам понадобится 1 дополнительный байт только при использовании одного из 127-255 символов ( не , поэтому commons I ставка ).

Мое мнение? Используйте UTF-8, если можете, и если у вас нет проблем с этим. Когда вы сохраняете день, вам потребуются дополнительные символы (или день, когда вы должны перевести свой контент), действительно стоит несколько дополнительных байтов здесь и там в БД ...

3 голосов
/ 07 декабря 2011

Краткий ответ: Неважно.

Длинный (э) ответ: Думайте об этом так.У вас есть таблица message, которая содержит сообщения форума.У вас много сообщений (скажем, 1 миллион).Предположим, что каждое сообщение занимает 10 дополнительных байтов из-за UTF-8.Это 10 миллионов дополнительных символов, что даже не 10 МБ (не считая индекса).

Для такого «популярного» форума вы не будете использовать больше 15 МБ памяти.Это ничего.Вам определенно не следует беспокоиться о лишних байтах, и UTF-8 обеспечит преимущества, которые намного важнее, чем 10 МБ.

1 голос
/ 07 декабря 2011

Имеет ли значение размер?

Как вы знаете, символы в диапазоне от U + 0080 до U + 009F занимают вдвое больше места в UTF-8, чем в ISO-8859-1. Но как часто эти персонажи привыкают?

В типичном испанском тексте я получил с первой страницы Википедии:

Artículo bueno

«Съемочная временная серия телесериалов»; Симпсон фью эммитида оригинальная порция Fox Entre El 17 де сентябрь 1995 года 19 мая 1996 года. Los productores ejecutivos de la séptima temporada fueron Билл Оукли и Джош Вайнштейн, quienes производственный 21 эпизод де ла темпорада. Давид Миркин фью эль шоу бегун-де-лос-куатро востребованный, в том числе досешио хабиан sido producidos para la temporada anterior. La Séptima Temporada Estvo Nominada Para Dos Premios Primetime Эмми, включая категория "Большая программа анимации" obtuvo un Premio Annie por "Моя основная программа по телевидению". ля Версия на DVD-сайте Fue Lanzada a la Venta en la Región 1 el 13 de Декабрь 2005, en la Región 2 el 30 de enero de 2006 de en la Регион 4-й квартал 29 марта. La Caja Recopilatoria Fue Puesta A La Venta En Dos Formatos различных: Una Caja Con La Forma де La Cabeza de Marge и otra Прямоугольная классика, en la cual el dibujo muestra el estreno de una película.

В море из 1044 символов ASCII 17 символов, не относящихся к ASCII. Это означает расширение только на 1,6% при кодировании в UTF-8. Вряд ли стоит беспокоиться, особенно если учитывать HTML-разметку полностью ASCII.

(Однако, различие может быть значительным для более акцентированного языка, такого как Sango .)

Как ваша идея сработает?

Собираетесь ли вы кодировать все свои данные в windows-1252? Это не дает вам глобализации; земной шар не останавливается у реки Одер. Правда ISO-8859-1 (без & euro;) еще хуже; глобус не останавливается на английском канале.

Пометить текст с его кодировкой? Это работает для XML, HTML и SMTP. Но вы спросили:

Разве это не играет решающей роли в хранилище базы данных?

Как вы собираетесь хранить смешанные строки Latin-1 и UTF-8 в базе данных?

Есть две колонки EncodedText BLOB, IsUtf8 BOOLEAN? Как ты собираешься спросить это? Конечно, вы не просто посмотрите на EncodedText и проигнорируете IsUtf8; этот подход приводит к моджибаке.

Вы могли бы написать представление со столбцом CASE WHEN IsUtf8 THEN EncodedText ELSE Latin1ToUtf8(EncodedText) END и правильным триггером INSTEAD OF INSERT, но это, вероятно, будет стоить вам больше байтов, чем экономит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...