以前写过一篇关于MySQL升级到4.1出现乱码如何解决的帖子,他只是讲述了当你导入的数据都正常了,该怎么使用到MySQL4.1以后版本的多语言特征。但是如果在导入的过程中就遇到了字符集的问题,该怎么办呢?就是无论你怎么导入,怎么折腾字符集,都是乱码,但是你新插入的任何一条数据都没有问题,这就不是升级后调整字符集的问题了,而是在导出导入的工程中就需要考虑。
A regular expression (regex) is a powerful way of specifying a complex search.
MySQL uses regular Henry Spencer's inplementation of regular expressions. And that is aimed to conform to POSIX 1003.2. MySQL uses the extended version.
This is a simplistic reference that skips the details. To get more exact information, see Henry Spencer's regex(7) manual page that is included in the source distribution. See section C Contributors to MySQL.
A regular expression describes a set of strings. The simplest regexp is one that has no special characters in it. For example, the regexp hello matches hello and nothing else.
1 设置phpMyAdmin
Language:Chinese simplified (zh-utf-8)
MySQL 字符集:UTF-8 Unicode (utf8)
MySQL 连接校对 gbk_chinese_ci
2 创建数据库时
整理设置成 gbk_chinese_ci
3 用SQL建立表中
ENGINE=MyISAM DEFAULT CHARSET=gbk;
ENGINE=InnoDB DEFAULT CHARSET=gbk AUTO_INCREMENT=40 ;
4 检查表结构中
varchar(100) 的整理属性为gbk_chinese_ci
其它类型的整理属性为空
5 代码中加上
$db->query("SET CHARACTER SET GBK"); Linux下需要,Windows下不需要
这个相当于Connection Character Sets and Collations
比如你要将 表 tb1里面的 f1字段的abc替换为def
UPDATE tb1 SET f1=REPLACE(f1, 'abc', 'def');
REPLACE(str,from_str,to_str)
在字符串 str 中所有出现的字符串 from_str 均被 to_str替换,然后返回这个字符串:
mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
-> 'WwWwWw.mysql.com'
这个函数是多字节安全的。
示例:
UPDATE `dede_addonarticle` SET body = REPLACE ( body,
'</td>',
'' );
UPDATE `dede_addonarticle` SET body = REPLACE ( body,
'</tr>',
'' );
UPDATE `dede_addonarticle` SET body = REPLACE ( body,
'<tr>',
'' );
UPDATE `dede_archives` SET title= REPLACE ( title,
'大洋新闻 - ',
'' );
UPDATE `dede_addonarticle` SET body = REPLACE ( body,
'../../../../../../',
'http://special.dayoo.com/meal/' );
mysql replace
用法1.replace intoreplace into table (id,name) values(‘1‘,‘aa‘),(‘2‘,‘bb‘)
此语句的作用是向表table中插入两条记录。
2.replace(object, search,replace)
把object中出现search的全部替换为replaceselect replace(‘www.163.com‘,‘w‘,‘Ww‘)--->WwW wWw.163.com
例:把表table中的name字段中的 aa替换为bbupdate table set name=replace(name,‘aa‘,‘bb‘)
近日,国际著名开源数据库厂商MySQL的中国研究中心与天津海量信息技术有限公司签署了战略协议,海量科技将为MySQL最大程度在中国实现本地化,抢占中国开源数据库市场提供强有力的帮助。
MySQL是一款非常实用的开源数据库软件,其本身优越的速度、可扩展性和可靠性让它成为企业不可获缺的数 据库产品。而Oracle、IBM、Sybase和微软的商业数据库软件由于源码保密的原因,不可能让使用该产品的企业任意察看、修改并重新分发,对企业 的实际应用非常不利。据Gartner的一项调查显示,有66%的企业用户正在使用或者计划采用MySQL。
第三方市场调查机构Evans数据公司最近公布的一系列客户调查数据显示,在过去两年里,MySQL在所有开发者使用的数据库中获得了25%的市场份额。
Evans数据公司是专业的软件市 场调查机构,它定期提供最新的面向全球开发者的深度调查和IT产业市场情报。Evans公司的本次调查显示,数据库的使用者中有40%是开发人员,而两年 前这一数据是32%。Evans数据公司指出,随着越来越多的开发者使用开源软件(2006年秋在北美的比率是65%),MySQL的使用在未来会持续增 长。
“我们一直看到开源数据库的不断成长,因为采用开源数据库的用户在持续攀升。”Evans数据公司的总裁John Andrews说。“从我们的排名分类中上升的名次来看,我们看到开源数据库已经赶上或者超过专有数据库。”
Evans数据公司的其他发现还有:
MySQL的广泛使用归功于采纳整个LAMP架构的用户增长。
四成企业级开发者表示他们在操作中使用了一种开源数据库。
超过2/3的开源开发者(69%)对目前市场上的开源数据库常满意。
将comment表中的author_url包含www.sohu.com的记录,其中的sohu替换为sina,一个语句搞定~
update comment set author_url=REPLACE(author_url, 'sohu', 'sina') where author_url REGEXP "www.sohu.com";
带IF判断的复杂替换
update comment set url=IF(url REGEXP "test.yahoo.com.cn",REPLACE(url, 'www1.sohu.com', 'www.sina.com'),REPLACE(url, 'www2.yahoo.com', 'www.sina.com')) where 1=1;
我的测试环境.基本上数据是瞬间同步,希望对大家有帮助
redhat 9.0
mysql3.23.57
mysql数据同步备份
A服务器: 192.168.1.2 主服务器master
B服务器: 192.168.1.3 副服务器slave
A服务器设置
#mysql –u root –p
mysql>GRANT FILE ON *.* TO backup@192.168.1.3 IDENTIFIED BY ‘1234’;
mysql>\exit
上面是Master开放一个账号backup密码1234给IP:192.168.1.3有档案处理的权限
mysqladmin –u root –p shutdown
备份Master所有数据库..通常都用tar指令.
#tar –cvf /tmp/mysql.tar /var/lib/mysql
注意:tar的时候,MySQL是要在stop情况下
在A机器上修改/etc/my.cnf
在[mysqld]区段内加入参数
log-bin
server-id=1
sql-bin-update-same
binlog-do-db=vbb
重启A服务器mysql
此时因为有加入log-bin参数,因此开始有index产生了,在/var/lib/mysql目录下有.index档案纪录数据库的异动log.
B服务器设置
设定/etc/my.cnf
在[mysqld]区段加入
master-host=192.168.1.2
master-user=backup
master-password=1234
master-port=3306
server-id=2
master-connect-retry=60 预设重试间隔60秒
replicate-do-db=vbb 告诉slave只做vbb数据库的更新
log-slave-updates
将A上的mysql.tar copy到B上
用ftp传B的/tmp
9.解压缩
#cd /var/lib/
状况测试
1.A跟B网络及服务都正常情况下,由A端变化数据后,到B端浏览数据,检视是否有进行replication?!
2.模拟B当机,或是B不一定需要一直跟A有连接.
将由A端变化数据后,到B端浏览数据,B点应该是没有数据变化的
#tar xvf /tmp/mysql-snapshot.tar
#chown –R mysql:mysql mysql
1重启B服务器的mysql
这时在/var/lib/mysql目录会出现master.info,此档案纪录了Master MySQL server的信息.
状况测试
1.A跟B网络及服务都正常情况下,由A端变化数据后,到B端浏览数据,检视是否有进行replication?!
2.模拟B当机,或是B不一定需要一直跟A有连接.
将由A端变化数据后,到B端浏览数据,B点应该是没有数据变化的
| id | ColA | ColB |
| 1 | 12345 | ABCD |
| 2 |
12345 |
ABCD |
关键是找出重复的其中的一条,
如下:
SELECT max(id) as id, a.cola,a.colB
FROM a join
(
SELECT cola,colb FROM a GROUP BY cola, colb
HAVING COUNT(*) > 1) b
on a.filecode = b.filecode and a.colb=b.colb
group by a.col1,a.colB

然后删除即可.