mysql字符串函数

March 25th, 2009 | Filed Under: Uncategorized | 3 Comments

如果结果的长度大于服务器参数max_allowed_packet,字符串值函数返回NULL。见10.2.3 调节服务器参数。PHPChina 开源社区门户,OT6f6z’N”rx
PHPChina 开源社区门户4s’Z/S”n?*?(I b
对于针对字符串位置的操作,第一个位置被标记为1。PHPChina 开源社区门户~]7{a(Yn,T!x

D(c�gdK0ASCII(str)
^)Us0l RP2Q1Vz0返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。PHPChina 开源社区门户T’@cL&nY.\
mysql> select ASCII(’2′);PHPChina 开源社区门户}x@-a”{&p I
-> 50
Y$wQ#h1c/TL$X,k0mysql> select ASCII(2);PHPChina 开源社区门户6f0iv:},^2VKn2Y
-> 50
w;tyvEsj0mysql> select ASCII(’dx’);
u\ O.DR3W@4a0-> 100PHPChina 开源社区门户#] z5\ O+s6u
也可参见ORD()函数。
*~:AA9Wv*]0y0PHPChina 开源社区门户:x\*j;s {}4cg”k
ORD(str)PHPChina 开源社区门户”kO4N6f!z’J%O4tcD5f
如果字符串str最左面字符是一个多字节字符,通过以格式((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]返回字符的ASCII代码值来返回多字节字符代码。如果最左面的字符不是一个多字节字符。返回与ASCII()函数返回的相同值。PHPChina 开源社区门户,vL!^&N3{:rI
mysql> select ORD(’2′);PHPChina 开源社区门户5D([5g*k[!JY.L1`
-> 50
a1wj hLV @x0
)@"X#?+UP0\0CONV(N,from_base,to_base)PHPChina 开源社区门户 N6y'Y7ji
在不同的数字基之间变换数字。返回数字N的字符串数字,从from_base基变换为to_base基,如果任何参数是NULL,返回NULL。参数N解 释为一个整数,但是可以指定为一个整数或一个字符串。最小基是2且最大的基是36。如果to_base是一个负数,N被认为是一个有符号数,否则,N被当 作无符号数。 CONV以64位点精度工作PHPChina 开源社区门户(^}W'Q2s(pKe
mysql> select CONV("a",16,2);PHPChina 开源社区门户i u/?.t8e#XG
-> '1010'PHPChina 开源社区门户!HrN[o6I1Z}
mysql> select CONV("6E",18,8);
?"_f%n8R!X0\;xk0-> '172'PHPChina 开源社区门户D)\ du(XO4S
mysql> select CONV(-17,10,-18);
h&YYg.lV s!EIW0-> '-H'PHPChina 开源社区门户#q)W'@D0dV^ R
mysql> select CONV(10+"10"+'10'+0xa,10,10);PHPChina 开源社区门户6H,c#x-n8UU
-> '40'
r H&{:als9S&Dm0PHPChina 开源社区门户mlcG$C(W-{A
BIN(N)
2ag$x~ sDn�T0返回二进制值N的一个字符串表示,在此N是一个长整数(BIGINT)数字,这等价于CONV(N,10,2)。如果N是NULL,返回NULL。PHPChina 开源社区门户;MJV'{S\`X [
mysql> select BIN(12);PHPChina 开源社区门户 y]:l’lob
-> ‘1100′
y#Od*ecAjp.H#A-H*^0PHPChina 开源社区门户c5jn Pr
OCT(N)
T S8S t”X]X$D+i0返回八进制值N的一个字符串的表示,在此N是一个长整型数字,这等价于CONV(N,10,8)。如果N是NULL,返回NULL。
;A6u,a,SP’[0mysql> select OCT(12);
YB{gb/u0-> '14'
K^3E@"W?Q? g0
D$e9RCk j e�y0HEX(N)PHPChina 开源社区门户"D mn7RR+E:h`TX
返回十六进制值N一个字符串的表示,在此N是一个长整型(BIGINT)数字,这等价于CONV(N,10,16)。如果N是NULL,返回NULL。PHPChina 开源社区门户!BL g'Z+ku'S K2e+N
mysql> select HEX(255);
!N!b*I$pB"H!N0-> 'FF'PHPChina 开源社区门户f3BIL5v(WB,x~ ? N
PHPChina 开源社区门户 A!g4F7IFa
CHAR(N,...)PHPChina 开源社区门户7_h%m:?hr.^L
CHAR()将参数解释为整数并且返回由这些整数的ASCII代码字符组成的一个字符串。NULL值被跳过。
b:}.|;n \'yw0mysql> select CHAR(77,121,83,81,'76');
,k4?SDgiH@l0-> 'MySQL'
(R3N4@ R dD0r0mysql> select CHAR(77,77.3,'77.3');
DV9Dv0D0-> 'MMM'PHPChina 开源社区门户pw0{'V1qL6d!}'o'q
PHPChina 开源社区门户Y+I$Y~d/U
CONCAT(str1,str2,...)
'c8ho[A{1g0返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。可以有超过2个的参数。一个数字参数被变换为等价的字符串形式。
+v;Qx ?'[V8|0mysql> select CONCAT('My', 'S', 'QL');
r|TL3U)b+]4L0-> ‘MySQL’PHPChina 开源社区门户5C5}dM$_
mysql> select CONCAT(’My’, NULL, ‘QL’);PHPChina 开源社区门户s#j c[QJ
-> NULL
?RSs)se0mysql> select CONCAT(14.3);PHPChina 开源社区门户/E _�EFy){}6H"y
-> '14.3'PHPChina 开源社区门户"b3i R:ri$n

8V!W KS ?8G Q2UA0LENGTH(str)
ol3F.J)h2\.d0 PHPChina 开源社区门户!l^}a2Y+G+[#a
OCTET_LENGTH(str)
w,YM d'z%SJ0
s] GAgG2E%J*R4Y0CHAR_LENGTH(str)
n7^5`E-f*t0 PHPChina 开源社区门户G5S`5D3k
CHARACTER_LENGTH(str)PHPChina 开源社区门户B E:k`0U/l
返回字符串str的长度。
`8`”v7?)bSjq~Z0mysql> select LENGTH(’text’);
SF”?j l6w[4M v*l0-> 4PHPChina 开源社区门户wH_PU1] d)F/\5W
mysql> select OCTET_LENGTH(’text’);PHPChina 开源社区门户 \#iv ]T%~
-> 4
%UH9f2bn i~i*k g0
5A*g2?�rQu4|5fb0注意,对于多字节字符,其CHAR_LENGTH()仅计算一次。PHPChina 开源社区门户 ~;q5l9H&^3x
PHPChina 开源社区门户c-Q mI/D0F0a5nyn
LOCATE(substr,str)PHPChina 开源社区门户)JL8vQ#Pz:CK
PHPChina 开源社区门户/S\8J|!t+N)|
POSITION(substr IN str)
~{j|E+wA*\0返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0.PHPChina 开源社区门户nI#] o#n!Q!zf?L
mysql> select LOCATE(’bar’, ‘foobarbar’);
9M?5VD}h2S0-> 4
tU8C.|BEhk0mysql> select LOCATE(’xbar’, ‘foobar’);
#Iw0?di0-> 0
4q o\p N B&V0
+Q2QvCk QKz(~0该函数是多字节可靠的。
i q%JP b pyz n0LOCATE(substr,str,pos)
3Tr!p,I,kcX3U0返回子串substr在字符串str第一个出现的位置,从位置pos开始。如果substr不是在str里面,返回0。PHPChina 开源社区门户u z(P*M4o7dB
mysql> select LOCATE(’bar’, ‘foobarbar’,5);PHPChina 开源社区门户f ] H~GtSJ7Wk_
-> 7PHPChina 开源社区门户.Y B XMC-e+l
PHPChina 开源社区门户%QZ!@jX5GU
这函数是多字节可靠的。PHPChina 开源社区门户)lCH)RpLx b1h
PHPChina 开源社区门户4qY.JO _4C8B
INSTR(str,substr)
GC2Fv7p0返回子串substr在字符串str中的第一个出现的位置。这与有2个参数形式的LOCATE()相同,除了参数被颠倒。
‘hX5aY8J;w0mysql> select INSTR(’foobarbar’, ‘bar’);
Y+h#n I,t3|u0-> 4
fSiX2C0mysql> select INSTR(’xbar’, ‘foobar’);PHPChina 开源社区门户$x�I M2D0X5o$j
-> 0
WV]}6Xhi0
f{ Jq {,a mT2k8D}0这函数是多字节可靠的。
V:G]S s l5M0PHPChina 开源社区门户 @ ~2Yb}9H
LPAD(str,len,padstr)PHPChina 开源社区门户1VlLs M
返回字符串str,左面用字符串padstr填补直到str是len个字符长。
‘Y N�s#E8F O([0mysql> select LPAD('hi',4,'??');
@2]![_:xG%G;Qn0-> '??hi'PHPChina 开源社区门户?)?J*^E1P Y8B0S|

"F}WSNu4["j0RPAD(str,len,padstr)PHPChina 开源社区门户%p+D#^#j[!AHQ�S*m
返回字符串str,右面用字符串padstr填补直到str是len个字符长。
.A jc1f;p0])CBXs0mysql> select RPAD(’hi’,5,’?');
xyS2m|8Wh0v�l0-> ‘hi???’PHPChina 开源社区门户0q!}5d$X!OgH9fL;]U

F.a%D8_^;Ta0LEFT(str,len)PHPChina 开源社区门户8Q?$} wRW8u
返回字符串str的最左面len个字符。
I&V

MySQL: MyISAM和InnoDB的区别

March 25th, 2009 | Filed Under: Uncategorized | 1 Comment

InnoDBMyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

MyIASMIASM表的新版本,有如下扩展:
二进制层次的可移植性。

NULL
列索引。

对变长行比ISAM表有更少的碎片。

支持大文件。

更好的索引压缩。

更好的键吗统计分布。

更好和更快的auto_increment处理。

以下是一些细节和具体实现的差别:

1.InnoDB不支持FULLTEXT类型的索引。
2.InnoDB
中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含where条件时,两种表的操作是一样的。
3.
对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
4.DELETE FROM table
时,InnoDB不会重新建立表,而是一行一行的删除。
5.LOAD TABLE FROM MASTER
操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”

任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势.