当前位置: 首页 > 面试题库 >

为什么是“ 2”>“ 10”?

商绍元
2023-03-14
问题内容

为什么 初始空间 大于“ 10”的“ 2”?

select ' 2' > '10';
 ?column? 
----------
 t
(1 row)

我在latin1和utf8英语归类中都尝试过:

                                    List of databases
   Name    |   Owner    | Encoding  |    Collation     |      Ctype       |   Access privileges   
-----------+------------+-----------+------------------+------------------+-----------------------
 cpn       | cpn        | UTF8      | en_US.UTF-8      | en_US.UTF-8      | 
 teste     | cpn        | LATIN1    | en_US.ISO-8859-1 | en_US.ISO-8859-1 |

我知道它与类型有关,因为当它被强制转换时,它可以按预期工作:

teste=> select ' 2'::char > '10';
 ?column? 
----------
 f
(1 row)

这里到底发生了什么?

编辑:

以上所有操作都是在Fedora 13中使用8.4.8完成的。但是我只是在Centos 6中使用9.04进行了测试,结果相同:

select ' 2' > '10';
 ?column? 
----------
 t
(1 row)

数据库清单

   Name    |   Owner    | Encoding  |  Collation  |    Ctype    |   Access privileges   
-----------+------------+-----------+-------------+-------------+-----------------------
 cpn       | postgres   | UTF8      | en_US.UTF-8 | en_US.UTF-8 |

新编辑:

这是为了进一步混淆:

select ' ' > '1';
 ?column? 
----------
 f
(1 row)

问题答案:

我认为PostgreSQL自动尝试找出幕后的类型,而在Linux中它试图摆脱’‘,其中一些比较也是基于语言环境的。

  • 因此,' 2' > '10'变成'2'>'10'与比较是'2'>'1';它们不相等,因此无需继续字符串的其余部分,并且ascii('2')大于ascii('1'),因此其结果为true。

  • 如果它是一个相等操作(例如‘22’= ‘22’),则将导致结果为false,因为Postgres进行了逐字节比较。这很重要,因为引擎在进行比较时会使用两种不同的算法。

  • 如果通过类型转换指定类型,则不会覆盖空间规则(' '=>'')。

同样 值得一 提的是: #postgresql中的RhodiumToad和Peerce



 类似资料:
  • Ruby是"一种用于迅速和简便的面向对象编程的解释性脚本语言";这意味着什么? 解释性脚本语言: 有直接呼叫系统调用的能力 强大的字符串操作和正则表达式 开发中快速回馈 迅速和简便: 无需变量声明 变量无类型 语法简单而坚实 自动内存管理 面向对象编程 任何事物都是一个对象 类,继承,方法,等等 单态方法 模块糅合 迭代器和闭包(closures) 以及: 多精度整数 异常处理模式 动态装载 线程

  • 有人可以帮我理解吗 此语句是否正确:这意味着bcdc是Baseclass类类型,其值是Dervedclass对象类型?此外,这是什么意思,为什么一个对象会这样实例化,而不是让类类型与正在实例化的新对象相同,如? 为什么

  • 可能的重复: Java如何处理整数下溢和上溢,您将如何检查它? system.out.println(4*2147483647)在Java中如何等于-4? 我想知道这为什么成立:

  • 问题内容: Python如何评估表达式? 我插了多少,这就是答案。请任何人可以解释这种行为 因为它是印刷,因为它是印刷 问题答案: 您的表情与: 可以在任何数字表达式之前使其为负,或不执行任何操作(存在对称性选项)。带有负号: 和 我看到您澄清了您的问题,说您来自C背景。在Python中,没有像C和C这样的增量运算符,这可能是造成混淆的原因。要递增或递减变量,或在Python中使用以下样式:

  • 问题内容: 如果我尝试这样做: 我得到以下输出: 演示:http://codepad.org/ncVuJtJu 这是为什么? 我希望将其作为输出: 我的理解: 但是为什么不输出呢? 问题答案: 所有解释为什么得到2而不是1的答案实际上都是错误的。根据PHP文档,混合并以这种方式是不确定的行为,所以你可以得到1或2切换到不同版本的PHP可能会改变你得到的结果,这将是一样有效。 请参阅示例1,其中显示

  • 问题内容: java.util.Random源代码的第294行说 为什么是这样? 问题答案: 该描述并不完全准确,因为0不是2的幂。更好的说法是 当n是2的幂或2的幂的负数或零时。 如果n是2的幂,则二进制中的n是单个1,后跟零。-n为2的补数是倒数+ 1,因此位排成一行 要了解其工作原理,请将二进制补码视为逆+ 1。 因为当您添加一个得到两个的补码时,您会一直进行到一个。 如果n不是2的幂,则结