
Угнич вырвался из застенок и тут же схватил обострение. Рано выпустили, рано...
http://juick.com/2786799
Дата рождения: 01.11.1983
Тотальная неудачница и убийца жёстких дисков. Самая большая поклонница Ариэль. Член ордена Вселенского тормоза имени Осаки-сан. Любительница каваййных переднеприводных машинок. Суккуб на полставки. Когти прилагаются.
Угнич вырвался из застенок и тут же схватил обострение. Рано выпустили, рано...
http://juick.com/2786799
Linda-chan, а что он не так сказал?
У него софт старый просто :}
Linda-chan, When is UTF-8 not UTF-8?
When it's used in MySQL, apparently.
Чет не вижу там пригоревшей жопы Тони. Почистил штоле?
Sych, основная мысль оппоста «мы хотели перейти на UTF-8, чтобы больше не заморачиваться с кодировками, а вот всё равно заморачиваемся». Но он упускает из виду, что сама задача поменялась: кодировка значительно усложнилась (поэтому и пришлось вводить верхние плоскости).
Поэтому нельзя говорить, что сейчас всё как раньше. Сейчас ты можешь писать всё, что писал ранше, а париться приходится из-за символов, которые раньше никто бы не предложил добавить в кодировку.
В комментариях там ещё больший ад, там многие комментаторы соревнуются в невежестве. Приз в этом конкурсе незнания достаётся eugene-pnf, который написал писульку с критикой, не ознакомившись с принципами выделения символов (в частности, совместимости «1 символ в 1 символ»).
@zikmok, речь не про уникод, а про utf-8
вот статья про суть происходящего: http://www.war-worlds.com/b...upport-in-mysql-is--
там есть строка For reasons that completely escape me, MySQL 5.x limits UTF-8 strings to U+FFFF and smaller. That is, the "BMP". Why they call this encoding "UTF-8" is beyond me, it most definitely is not UTF-8.
For reasons that completely escape me
А причина очевидна: обратная совместимость. Разработчики MySQL пообещали, что кодировка utf8 проверяет, чтобы символ входил в число возможных в первом стандарте уникода символов. Определили public interface, так сказать. А дальше в новых версиях придерживаются этого public interface.
Кто ж знал, что уникод расширит количество доступных кодовых мест. Знали бы — сформулировали бы правильность иначе.
MySQL 5.x limits UTF-8 strings to U+FFFF and smaller
Потому что в первой версии уникода были только символы от U+0000 до U+FFFF, поэтому символы выше были ошибочны. Вот оно и проверяет UTF-8 на наличие ошибок.
Просто это ошибки с точки зрения первой версии уникода, а не современной.
@zikmok, мы явно с тобой о разном говорим, потому что оба подробно аргументируем свою позицию, но к общему не приходим. Давай откроем заново http://juick.com/ugnich/2786799 с которого всё началось. Там написано:
сделать UTF-8 единственной кодировкой
emoji в UTF-8 не поддерживаются
менять utf8 на utf8mb4
Ты постоянно зачем-то говоришь про уникод. Да, ты прав про уникод. Ты прав. Но уникод и utf-8 это две разные вещи. В этом треде только ты говоришь про уникод. И угнич, и мускуль, и я - все говорят про utf-8
Так вот, правда в том, что в utf-8 всё поддерживается, это только кодеры мускуля придумали utf8 и utf8mb4 больше никто. Причём у мускуля utf8 - ненастоящий utf8, потому и потребовался ещё один utf8mb4. У всех остальных людей ОДИН utf8, в который всё влезает и всё поддерживается.
Не надо говорить про уникод, я про него знаю, я понял твой взгляд. Я просто подчеркну, что мы говорим о разных вещах. Если говорить о уникоде - я признал твою правоту. Если говорить о utf8 - ты признай мою правоту.
kolenka, UTF-8 — это система представления уникода. С какой стати ты отделяешь одно от другого?
У всех остальных людей ОДИН utf8, в который всё влезает и всё поддерживается.
Потому что авторы большинства программ не так волновались об обратной совместимости, как авторы MySQL, и поменяли правила проверки на правильность символов. Или вообще её не реализовывали.
С какой стати ты отделяешь одно от другого?
Потому что я смотрел в сырые байты строковых констант в отладчике. Я смотрел в байты файлов, которые я сохранял то в Unicode то в UTF-8 в Far Manager. Это совсем разные вещи.
Например, в Qt внутри все строки хранятся в Unicode.
И можно сделать toUtf8 - http://doc.qt.io/qt-5/qstring.html#toUtf8
Я смотрел в байты файлов, которые я сохранял то в Unicode
Ты видел не уникод per se, а одно из его представлений, UCS2 или UTF-16.
Уникода ты увидеть не мог, так как уникод — это абстракция, соотношение между числами и символами. А уж как оно конкретно кодируется определяется кодировкой уникода.
@zikmok, окей, тогда мы пришли к согласию, и единственное разногласие между нами в том, что ты хвалишь мускульцев за то, что они диапазон U+0000 до U+FFFF назвали utf8, тогда как я и тот автор блога и прочие в треде считают, что это было ошибкой, надо было назвать его UCS2 или UTF-16. Тогда бы не возник этот тред, так как угнич не ругал бы emoji
Linda-chan, в utf-8 слезает всё на свете, даже небо, даже Аллах. Не надо никакого UTF-64
тогда как я и тот автор блога и прочие в треде считают, что это было ошибкой, надо было назвать его UCS2 или UTF-16
Какого чёрта называть UTF-8 названием другой кодировки?
Ещё раз. В MySQL самая что ни на есть UTF-8 . Но там к тому же там реализовали проверку на правильность, чтобы UTF-8 кодировала существующие в уникоде кодовые места. А потом кодовых мест выделили ещё, чего никто не ожидал.
MySQL не переводит UTF-8 в UCS2. Она просто проверяет.
А почему они не изменят алгоритм проверки?
Потому что совместимость. Уже пообещали, что там будут только символы до U+FFFF, вот и приходится выполнять обещания.
Неужели сразу же у всех программы поломаются, ибо рассчитывали именно на такой алгоритм?
а) У других программ либо другой подход к совместимости (там поменяли втихаря, т.к. решили, что ничего плохого не случится), либо к проверке целостности данных (вообще не проверяли строки на валидность и принимали что попало).
б) И да, во многих программах ошибки с верхними плоскостями были. Совсем не давно Скайп выводил эти символы как два квадратика, например.