Проблемы при регистрации смайлов в MySQL с ASP Classic - PullRequest
0 голосов
/ 06 мая 2020

Доброе утро!

Некоторое время я пытался внедрить смайлики в свои приложения, но у меня много трудностей. Я уже протестировал несколько решений inte rnet, но ни одно из них не оказалось эффективным.

Я постараюсь подробно описать все, что делаю:

  • Я использую Classi c ASP и MySQL в версиях 5.6.40-84.0-log и 5.6.26-log .
  • Приложение размещено на Plesk Windows (я пробовал запустить локально, то же самое касается базы данных). Страницы Notepad ++ уже были протестированы в UTF-8 и UTF8 without BOM.
  • В HTML <head> есть <meta charset = "utf-8">.
  • <form> имеет тег accept-charset="UTF-8".
  • ASP имеет Response.AddHeader "Content-Type", "text/html;charset=UTF-8", Response.CodePage=65001, Response.LCID=1060 и Response.Charset="utf-8".

Теперь о проблемах:

В обеих версиях MySQL, когда я меняю COLLATE на utf8mb4_unicode_* или utf8mb4_bin, он автоматически возвращается к utf8mb4_0900_ai_ci.

В версии 5.6.40-84.0-log , если я зарегистрирую смайлики непосредственно в базе данных, они будут похожи на ??????????????.

В версии 5.6.26-log , если я зарегистрируюсь непосредственно в базе данных, возвращается ошибка:

Executing: INSERT INTO `db`.`table` (` emoji`) VALUES ('tion 123 ????? ão'); Operation failed: There was an error while applying the SQL script to the database. ERROR 1366: 1366: Incorrect string value: '\ xF0 \ x9F \ x98 \ x80 \ xF0 \ x9F ...' for column 'emoji' at row 1 SQL Statement: INSERT INTO 'db'. 'Table' ('emoji') VALUES ('tion 123 ????? ão')

В этой же версии при регистрации через страницу, используя SET NAMES 'utf8mb4' или SET NAMES' utf8' в ODB C строка подключения, возвращается следующая ошибка:

Microsoft OLE DB Provider for ODBC Drivers error '80004005' [MySQL] [ODBC 3.51 Driver] [mysqld-5.6.22] Incorrect string value: '\ xE7 \ xE3o' for column 'field' at row 1

EDIT 1: Когда я обращаюсь к SHOW SESSION VARIABLES LIKE 'character_set%'; и SHOW SESSION VARIABLES LIKE "%collation%"; базе данных, он возвращает следующие результаты :

enter image description here

Спасибо!

* 1 079 * Перевод с помощью Google Translate (rsrs)

1 Ответ

0 голосов
/ 07 мая 2020

Для Emoji и некоторых китайцев вам нужно utf8mb4, а не utf8 в MySQL.

Поскольку вы используете старую версию 5.6, вы можете столкнуться с другой проблемой. http://mysql.rjweb.org/doc.php/limits#767_limit_in_innodb_indexes

Если этот E7E3 должен был быть çã, значит, у вас тоже есть текст в кодировке latin1.

Do not смешайте кодировки в одном столбце.

Ваш вывод для SHOW SESSION VARIABLES LIKE 'char%' показывает, что соединение - это просто utf8; это должен быть utf8mb4. Основное различие между ними - в эмодзи.

...