有人可以解释关系运算符如何应用于MySQL数据库中的字符串值。
+--------------+
| employeeName |
+--------------+
| emp41 |
| Emp1 |
| Emp2 |
| Emp3 |
| Emp4 |
| Emp5 |
| Emp6 |
| Emp7 |
| Emp8 |
| Emp9 |
| Emp10 |
| Emp11 |
| Emp12 |
| Emp13 |
| Emp14 |
| Emp15 |
| Emp16 |
| Emp17 |
| Emp18 |
| Emp19 |
| Emp20 |
| MGR1 |
| MGR2 |
| MGR3 |
| MGR4 |
| MGR5 |
| MGR6 |
| MGR7 |
| MGR8 |
| MGR9 |
| MGR10 |
| Emp31 |
| Emp32 |
| Emp33 |
| Emp34 |
| Emp35 |
| Emp36 |
| Emp37 |
| Emp38 |
| Emp39 |
| Emp40 |
+--------------+
select * from Employee where employeeName<'emp41';
+--------------+
| employeeName |
+--------------+
| Emp1 |
| Emp2 |
| Emp3 |
| Emp4 |
| Emp10 |
| Emp11 |
| Emp12 |
| Emp13 |
| Emp14 |
| Emp15 |
| Emp16 |
| Emp17 |
| Emp18 |
| Emp19 |
| Emp20 |
| Emp31 |
| Emp32 |
| Emp33 |
| Emp34 |
| Emp35 |
| Emp36 |
| Emp37 |
| Emp38 |
| Emp39 |
| Emp40 |
+--------------+
很明显,它不是基于ASCII值。
答案 0 :(得分:0)
如果关系运算符将字符串与数字进行比较,MySQL将尝试将字符串转换为数字。如果将timestamp列与字符串或数字进行比较,它将尝试将字符串/数字转换为时间戳。如果它不能这样做,它会将时间戳值转换为字符串或数字。
将TIME和DATE列与其他值进行比较。
但您仍然可以使用&#39;它将字符串相互比较,例如,SELECT 'bar' < 'foo'
将评估为true,因为&#39; b&#39;来自&#39; f&#39;在角色整理中。
这取决于 characterset 和整理。
这可以在您的查询中解释如下:
E出现在字符集中的M之前,这意味着MGR值不会被显示出来。 每个字母继续这样,Emp总是相等的,所以它将继续数字。
0到4评估为true,但是5-9不胜,这就是你错过emp 5-9值的原因。
Emp值的其余部分将显示出来,例如,Emp1&lt; Emp4(1)
您可能需要查看以下参考资料: