通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位# G! D1 K0 h( h" A, K4 n8 h" A
5 J% C: D7 W; Z
! b4 p) d: u$ H% L8 a: s: s8 [
" R3 i! r7 Q B, C0 x# [' V下面将以查询mysql数据库当中user()的第一位为例:6 s; K+ Q* R( y6 V
& l8 ^$ _. S+ u$ ~6 w3 \
! A% ~0 j) X# @# [. Q3 Z
2 x. v( y4 k- I: Fps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)% }- h7 @( V3 y9 U x$ P
! s! A s$ O! R* i, P* `
; L% n0 M, ^' b7 Y0 A
( d; M( ]# c/ {( r3 L; p首先执行如下sql语句:0 S2 |7 U+ D: {
! N6 t8 E8 u6 B
. }2 y5 u$ O U0 Y- ?: ~* {# ]# n' x7 o& U# W
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
$ F! R8 s. v( u" a8 \
4 U. v2 Z( t* E$ s
- {7 P0 S; Y8 x7 O; a4 D
2 R5 S+ d+ f' w" o我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
+ Y7 b: t0 o: C+ t2 i0 B
) Q# t' {+ c s& D h, ~
+ S/ ^; C: m% [& \0 L$ W3 Z; H6 ]0 H/ t3 Z4 o: q4 g
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为13 |* G$ c9 Q& d+ x4 ~3 u$ V2 j
; I5 ^/ j. G/ M4 z ) ]* j6 h8 z S% }" ^# V( b. C
) a8 ?2 }7 ]4 {如果运算结果为1,说明第一位为0,不为1. i" ?: L2 A" D, y& J4 O+ g3 t3 \
' L3 R4 D; E2 w: K+ O ; u: S/ k5 G, @2 G* `1 {/ b. P/ _+ m
6 ^- ~. c" ] r- F+————————————–+
+ R( m' [: U: c |: J* x
6 H7 C; J9 p7 C" J| (ascii((substr(user(),1,1))) >> 7)=0 |1 X7 A2 ~3 C g( V, c; r- `
* `$ ^3 |; v2 |/ i* x& P+————————————–+! Y8 T/ F2 }- \2 F
) k7 _- N- Y8 w z( g3 z! C( c| 1 |
% m5 N! S3 q, E5 \, X+ E' Y0 k* N3 U2 j [( C
+————————————–+
6 ?% h/ W! r% j! y
4 e# V: @$ w3 Y% M1 row in set (0.00 sec)6 n! S! d& ^" c% P7 \. Z& a, @
) z J. F1 E3 i8 b' z+ O
这样我们就确定这个8bit的ascii的第一位为09 O" }/ `& S2 p1 I# N; {2 g
, U5 f: y+ `/ A
& n* j: q3 X$ g% e
7 H- G. Z4 l) W第二次我们来做6次右偏移来确定前两位
. Z1 c( l8 K5 v3 l/ r; g; s! x- A. E* C7 X: H( ]. u# M
4 t9 T1 ~! M+ T. A7 x- ~
5 e" c6 w5 d# j+ H V3 T
前两位可能是01或00,即依然可以与0做比较, |7 l) C$ w7 x4 A; |4 C7 T
P2 D i, I9 A- n1 C
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;" q) p' F5 Y2 n* U$ }; p
1 v2 ~3 I- g2 O$ N
+————————————–+
7 n( a h3 O; m' D, G" M2 Q0 s( t! y5 \" z6 z
| (ascii((substr(user(),1,1))) >> 6)=0 |
* W6 K: V: V5 I8 z/ J, V* r; T- _) p* h( J Q7 c h3 d
+————————————–+
6 b- ]6 E; U1 B8 X2 R& h. i3 W D! h2 v9 z4 o- |3 Z
| 0 |
8 Q0 d5 ?* W/ L- r% ?* g
$ ~' G& j. {8 f7 }. w+————————————–+) g6 @8 R1 y" _; V5 _
1 O7 G( o2 n; e T1 row in set (0.00 sec), {& h; s/ }+ g8 _% ^. p* h. j) }
$ q5 \% e" P) U3 l9 f
5 y) |- P: f9 J; B9 Q$ {7 i
( u, X2 b) ]6 T( O H, [, ?7 B. w结果为0,即第二位为1
5 u5 h, l( X# `' n* |
$ _" C: V6 N9 r* @+ [ # C4 p n* H/ N! z. T) d
# o B' }4 h9 u" ], H8 P6 r8 e
开始猜测前三位为010或011
3 D/ ]0 } Y! w5 {5 Y
1 v& f K, a& A' L- h" W $ e, s" u7 F4 b+ Q& I- m# C$ `
! O+ t: p. E* W1 j- C$ n3 d让我们看看010和011的ascii码是多少
2 v) k0 E! L! f7 R' p% T+ y5 V: {8 Y. z* R2 ~' b
3 K$ r. \* c3 C5 x- g4 j! H; U6 k) g9 @
分别查询select b’011′ select b’010′
) I1 G. H* J. N, U0 M9 m& z( e+ K/ {! V; e5 T& B+ Y: _8 W. t2 K) m- y2 Z
/ ~, g' O- z2 A& g* X4 T
b) o8 \/ Z j, B7 o' B获得结果 010 = 2 011 = 3, d! k! {0 F. G
) L' _; T# s5 y9 F; B
% E5 u' ~7 z0 t6 _6 y/ Q- c$ Y
# ^0 e/ M. y: F% L) ]; c执行如下sql:
v# M* _8 c) M- [! X- v
. I, v0 v3 p( J2 V & W5 o+ T3 U) F( l% z
1 K/ X m9 G7 l
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;; d/ q9 q* ?8 X7 v2 e
; r* ]# n$ P: K9 ~* L* s6 |9 G2 P i
+————————————–+7 p: t& }9 x% f2 M# a. F5 b
$ W: F; t1 E" ]8 \$ V
| (ascii((substr(user(),1,1))) >> 5)=2 | A0 W9 z8 F' Z9 J+ }* c
) E9 _" N- Y; P+————————————–+: {2 f$ |, z! Z& G% d6 [
/ Z& d6 J) V. d$ h( t) v7 c
| 0 |8 M% |$ u/ N3 t# ^# |
5 [7 T: l1 S* a- O/ H8 D+————————————–+7 P5 k$ E' d6 N8 W
! C$ z$ |7 T' |; E即前三位不为010,而是011
2 S! f- I" g( v4 @
. a5 p; j% V [ ) `8 S1 t/ `& V K) C8 Y
, c% d& ]* u% ]& l. w) B直到获得最后一位
% `/ Z4 e' y3 {: T" I
$ [3 K. @6 }+ @: d / S: R z9 f) w. f
. W% ?; r, O. e" L( D最终结果为:01110010 ] ^8 h9 z5 B! w9 z( n
2 Y' b" e& C8 i3 w. O" r L6 `/ u% c
0 U! N* K. C. i3 i
) {! d! K, E( M, g转换一下:' a; j7 S, [* f3 S0 G
- [: O7 v! G" u: l: l4 l
& H: l4 X { { i( [9 @/ W5 i: T0 H
select b’01110010′" S3 V( e I; i1 f( z. I) h. w
0 o) Q Z" v% _5 |' M
) m6 H4 n$ x1 `1 r9 x- }, s
; t; ~0 b' h- m8 J查询结果
[* a9 B+ G0 k0 E- X8 L1 N$ s7 y% X( G! r5 ~: B6 I% {
- U4 C2 T; {2 B+ d7 u' r* v
* d9 {- r7 e3 B* e5 }$ Y; U
+————-+
" Q I I; W1 a
) N% U3 d! m6 i4 p| b’01110010′ |8 \) n" t, r m: A4 {
1 W" j. O" \4 _: I- V: ]0 L+————-+
2 D( R1 W9 m" A% J0 `' d
" w- z7 Z) O. f# c, V, ^| r |- g0 ]( w% _" ~% T, Y7 a8 b+ H; L
4 D1 a' i9 g; U5 z2 \0 N
+————-+) A# o0 S6 y* p3 P* j2 [( Q/ v
* c: S$ g; C8 ~4 i1 row in set (0.00 sec)
) e& [* C0 Y- q" o9 f& Z$ _; s6 B& }4 n1 k
6 O7 c$ G! f" v( W+ I* |1 p, F; g) I1 [% _9 v- J4 e/ }
这样我们就获得了user()的第一位.其它位依此类推5 B# ]% E9 r1 }7 Q6 d2 \
$ y2 Z, g6 ] N% I2 j* `
|