我正在MySQL/MariaDB中搜索存储时传输的值与以后可以检索的值不同的情况。我只对具有非二进制字符串数据类型的字段感兴趣,例如VARCHAR和*TEXT。
我想更全面地了解存储价值可以信任多少。这对于输出仅缺少某些字符的情况(如下面的转义字符示例(尤其有趣,因为这在验证时特别危险。
因此,这归结为:您能否创建一个输入字符串(和/或定义一个环境(,其中它不会在第二个语句中输出<value>
?
INSERT INTO t SET v = <value>, id = 1; // success
SELECT v FROM t WHERE id = 1;
我能想到的事情:
- 包含转义的字符串 (
a
→a
( - 如果太长,则截断
- 不支持输入的表的字符编码
如果某些内容静默失败,可能还取决于 SQL 模式的设置程度(如最后两个示例(。
提前非常感谢您的意见!
您可以相信所有数据库都这样做,标准的目的是什么,对于字符串和整数来说很简单,因为它将该数字或字符的二进制表示形式保存在您选择的字符集中。
十进制双精度值和单值是不同的,因为不能直接保存,所以涉及到分形见十进制表示
这也遵循标准,但你必须考虑到它。