【问题标题】:Emoji characters making MySQL crash using Classic ASP使用经典 ASP 使 MySQL 崩溃的表情符号字符
【发布时间】:2015-04-28 02:25:49
【问题描述】:

我有一个旧网站,访问者可以在其中添加他们的 cmets。到目前为止,它一直运作良好,它没有很多访客(它是针对小众受众的)。它是用经典的 ASP 构建的,它使用 MySQL(现在是 5.6)。它在 IIS 8.5 上运行,并且在没有 DSN 的情况下连接到数据库。

每当有人在他们的帖子中添加表情符号时,它都会使 IIS 服务进入某种循环使用超过 60% 的 CPU 并且永不停止。

我不想过滤掉这些字符,我认为它们很符合网站的前提,但是我没有预见到这个问题。当我第一次设置 MySQL 时,我使用 UTF-16 来确保我的用户可以用任何语言编写,直到现在我从未遇到过问题。有看起来像日语和韩语的消息,当用户告诉我当网站崩溃时他在做什么时,我才发现这是表情符号的问题。

  • 网站的所有页面/文件都以 Unicode 格式保存,并且所有这些页面/文件的字符集都设置为“utf-8”。
  • 数据库的排序规则是 utf16_unicode_ci,表也是。
  • 我可以直接从命令行或通过 HeidiSQL 将表情符号插入表中,但是......
  • 服务器将表情符号作为问号 (?) 发送。

这是我的连接字符串:

驱动程序={MySQL ODBC 5.3 Unicode Driver};Server=...;User=******;Password=** ****;Option=3;charset=utf16;

【问题讨论】:

  • 请提供SHOW CREATE TABLESELECT col, HEX(col) ... 用于显示不正确的内容。
  • 瑞克,我什么都试过了,几个小时后我就放弃了。我用 PHP 编写了一个小脚本,只是为了测试 VBScript 代码在做什么,并且正如我所期望的那样完美地工作。所以我决定用 PHP 重写整个站点并将其移动到 Apache 服务器。我仍然不知道到底是什么问题,我最好的猜测是 ODBC 驱动程序是这里的坏人。
  • 嗯...我没注意到“utf16”。我怀疑这是问题的一部分。

标签: mysql unicode asp-classic utf-16 emoji


【解决方案1】:

MySQL 中端到端使用CHARACTER SET utf8mb4

【讨论】:

  • 我做到了。我尝试了所有可能使用 4 个字节的字符集组合。到目前为止,似乎 ODBC 驱动程序存在问题。显然,在 2011 年已报告了与此问题有关的错误。我认为它还没有被修补。如果会的话。
  • 我有同样的问题,我用 MySQL 做了同样的解决方案,但没有帮助。看起来开发人员对此感到很兴奋。如果他们要在他们的 ODBC 连接器上添加 utf8mb4 支持,那将是一个简单的修复。
  • 我不熟悉 ODBC。你能给我们看看造成麻烦的连接调用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多