微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将二进制/单编码字符串与普通字符串进行比较和修剪?

如何解决将二进制/单编码字符串与普通字符串进行比较和修剪?

我正在使用下面的 MysqL 查询来检查哪些记录与修剪后的值不同

SELECT id,BINARY(username) as binary_username,TRIM(username) as trim_username FROM table.

上面的查询返回二进制值和修剪后的值,如下所示。

mySQL查询结果:

mysql-query-result

上图中突出显示的值表明二进制值与修剪值不同。

我尝试了以下两件事:

  • 计算二进制和修剪列的长度,但它是相同的LENGTH(binary_username) != LENGTH(trim_username)

  • 直接将它们等同于 binary_username != trim_username

但它们都返回空记录。

如何使用 MysqL 获取这些突出显示的条目?

编辑 1:我在查询结果中添加了 HEX 值

SELECT id,TRIM(username) as trim_username,HEX(username) as hex_username FROM table

query-result

提前致谢...

解决方法

为了避免存储、修剪等,尾随零,使用 VARBINARY 而不是 BINARY。为什么,请告诉我,你在文本字符串中使用 BINARY 吗?

请执行 SELECT HEX(username) FROM ... 以便我们进一步诊断问题。那个截图是可疑的——我们不知道客户端做了什么来“修复”输出。

嗯,这些都不是用 UTF-8 编码的,也不是我认识的任何其他东西。 “坏”字符(02、04、0c 17)在几乎所有编码中都是“控制代码”。 (“Unicode”不是编码方式,所以不相关。)

您想要一个用于测试控制代码的 REGEXP 吗?

在 PHP 中,json_encode 有一个 JSON_UNESCAPED_UNICODE 选项。见https://www.php.net/manual/en/function.json-encode.php

但这会生成 \u1234 类型的文本。

在将二进制数据存入 MySQL 时,使用 PDO 或 mysqli 中的绑定或转义机制。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。