通过 chromebook 终端访问的远程机器上的 MySQL 返回无意义的 unicode,它在我离开 MySQL 后仍然存在

标签 mysql unicode chromebook

我正在使用 chromebook 中的终端通过 ssh 连接到远程服务器。当我运行 MySQL (5.6) 选择查询时,有时其中一个字段会返回无意义的 unicode(当该字段应返回电子邮件地址时)并将 MySQL 提示更改为:

数据库>

└≤⎽─┌>

我输入的任何文本都会被转换成奇怪的 unicode。即使我退出 MySQL,问题仍然存在

最佳答案

数据库中的一个值恰好包含字节序列 0x1B、0x28、0x30 (ESC ) 0) .当您进行查询时,MySQL 将此字节序列直接打印到您的控制台。您可以通过从 python 中键入来重现效果:

>>> print '\x1B\x28\x30'

控制台使用控制字符(特别是 0x1B、ESC)作为允许应用程序控制控制台其他方面而不是纯文本的方式,例如颜色和光标移动。这种行为继承自他们伪装成的旧的哑终端设备(这就是为什么它们也被称为终端仿真器),以及一些我们可能不再需要的更奇怪的技巧。其中之一是在不同字符集之间永久切换(现在考虑编码,但这早于 Unicode)。

这些替代字符集之一是 DEC Special Graphics Character Set它看起来像你在这里。在此字符集中,通常在 ASCII 中用于 m 的字节 0x6D 作为图形字符 出现。

原则上,您可以通过打印字节序列 0x1B、0x28、0x42 (ESC ) B) 将您的终端重置为正常的 ASCII,但是当您的控制台显示垃圾时,这往往很难安排。

还有其他可能让您的控制台变得困惑的方式;将任意二进制数据打印到控制台通常不是安全的。过去,您甚至可以通过伪造键盘输入来使用控制台做一些更糟糕的事情,这使它成为一个安全问题,但今天它只是一个烦人的因素。

但是,人们通常不会期望在电子邮件地址字段中有任何控制代码。我建议使用数据库的应用程序应该对其接收到的输入进行一些验证,并删除或阻止所有控制代码(必要时可能换行除外)。

作为针对 ESC 字符的特定情况清理此字段的快速破解,您可以执行以下操作:

UPDATE things SET email=REPLACE(email, CHAR(0x1B), '');

关于通过 chromebook 终端访问的远程机器上的 MySQL 返回无意义的 unicode,它在我离开 MySQL 后仍然存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460182/

相关文章:

php - 随机 MySQL 行,同时避免漏洞

php - 查询数组的结果只显示一个结果?

java - jsp - 使用 unicode(希伯来字母)发布请求未正确显示

ssh - 您如何从Chromebook访问Amazon RDS实例?

mysql - 如何将 PostGIS 查询转换为 MySQL 空间查询

Mysql 按多个具有不同值的列进行分组

python - 如何让 Python Interactive Shell 打印西里尔字符?

c# - 如何将两个字母的国家/地区代码转换为标记表情符号?

javascript - Mailto 链接未在 Chromebook 上复制电子邮件正文

xamarin - 为什么 Xamarin.Forms 应用无法在 Chromebook 上运行?