将 trim binary/unicoded 字符串与普通字符串进行比较?
Compare and trim binary/unicoded string to normal string?
我正在使用下面的 mysql 查询来检查哪些记录与修剪值不同
SELECT id, BINARY(username) as binary_username, TRIM(username) as trim_username FROM table.
以上查询returns二进制值和修剪后的值如下所示。
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
提前致谢...
为避免存储、修整等尾随零,请使用 VARBINARY
而不是 BINARY
。请告诉我,为什么您要对文本字符串使用 BINARY?
请SELECT HEX(username) FROM ...
以便我们进一步诊断问题。该屏幕截图令人怀疑——我们不知道客户做了什么来“修复”输出。
好吧,其中 none 是用 UTF-8 编码的,也不是我能识别的任何其他编码。 'bad' 字符(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中的绑定或转义机制。
我正在使用下面的 mysql 查询来检查哪些记录与修剪值不同
SELECT id, BINARY(username) as binary_username, TRIM(username) as trim_username FROM table.
以上查询returns二进制值和修剪后的值如下所示。
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
提前致谢...
为避免存储、修整等尾随零,请使用 VARBINARY
而不是 BINARY
。请告诉我,为什么您要对文本字符串使用 BINARY?
请SELECT HEX(username) FROM ...
以便我们进一步诊断问题。该屏幕截图令人怀疑——我们不知道客户做了什么来“修复”输出。
好吧,其中 none 是用 UTF-8 编码的,也不是我能识别的任何其他编码。 'bad' 字符(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中的绑定或转义机制。