php 将二进制/Unicode字符串与普通字符串进行比较并将其修剪?

ijxebb2r  于 2023-06-21  发布在  PHP
关注(0)|答案(1)|浏览(97)

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

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

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

mysql查询结果:

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

我尝试了以下两件事:

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

但它们都返回空记录。

如何使用mysql获取这些突出显示的条目?
**编辑1:**我在查询结果中添加了HEX值

SELECT id,
   BINARY(username) AS binary_username,
   TRIM(username) AS trim_username,
   HEX(username) AS hex_username
FROM TABLE

感谢您的评分

3bygqnnd

3bygqnnd1#

为了避免存储、修剪尾随零等,请使用VARBINARY而不是BINARY。为什么,请告诉我,你使用BINARY的文本字符串??
请执行SELECT HEX(username) FROM ...,以便我们进一步诊断问题。这个屏幕截图是可疑的--我们不知道客户端是如何“修复”输出的。
好吧,这些都不是用UTF-8编码的,也不是我认识的其他任何东西。“坏”字符(02,04,0 c 17)在几乎所有编码中都是“控制代码”。(“Unicode”不是编码方法,因此不相关。)
是否需要测试控制代码的REGEXP?
在PHP中,json_encode有一个JSON_UNESCAPED_UNICODE选项。参见https://www.php.net/manual/en/function.json-encode.php
但这会生成\u1234类型的文本。
当将二进制数据存储到MySQL中时,使用PDO或mysqli中的绑定或转义机制。

相关问题