千家信息网

如何进行MYSQL特殊字符的处理

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章给大家介绍如何进行MYSQL特殊字符的处理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。单引号,以及行尾的斜杠引起的困惑:这一次的问题,我们直接从实际的工作中说起:工作内
千家信息网最后更新 2024年11月23日如何进行MYSQL特殊字符的处理

这篇文章给大家介绍如何进行MYSQL特殊字符的处理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

单引号,以及行尾的斜杠引起的困惑:

这一次的问题,我们直接从实际的工作中说起:

工作内容简介: 有一批用户ID存在文件里,需要从数据库里删除?

做这个事情,可能有很多的方法:
1, 把ID导入到数据库中,用SQL直接做表关联去删除 ;
2, 用SHELL(或其他语言)写个小程序,根据文件里的ID做一个FOR 循环,然后在MYSQL中去删除 ;
3, 用sed直接把ID转成delete语句,完了直接运行即可;

[@more@]

由于数据量较大(1.6亿),显然,我会用偷懒以及简单的方法3 :
----------------------------------------------
[root@im_ctuallot1 tmp]# cat loginid.txt
xouqun76818
ogku15mtb7c
jinlongkaikai@163.com
曾朴绍283902
轻舞飞扬061129付了

[root@im_ctuallot1 tmp]# sed -e "s/^/delete from ctulog.db_allot_center_64 where long_id='/g" -e "s/$/';/g" loginid.txt > loginid.sql
[root@im_ctuallot1 tmp]# cat loginid.sql
delete from ctulog.db_allot_center_64 where long_id='xouqun76818';
delete from ctulog.db_allot_center_64 where long_id='ogku15mtb7c';
delete from ctulog.db_allot_center_64 where long_id='jinlongkaikai@163.com';
delete from ctulog.db_allot_center_64 where long_id='曾朴绍283902';
delete from ctulog.db_allot_center_64 where long_id='轻舞飞扬061129付了';

mysql -uroot -h227.0.0.1 --default-character-set=latin1 --force ctulogdb < loginid.sql

--force 是防止某个SQL出现错误,而导致整个任务终止;
---------------------------------------------

搞定。
这看似非常简单的方法,也暴露出很多的问题,结果1.6行数据只成功删除了3300W,任务失败;
其实是我把这个任务想得太简单了: 在用户ID中存在任何可能的字符 ,如:
bao'pijkl
tingting831118

注意,在用户ID中有" ' ", 在行末尾有:" ";
我们把这样的语句渗杂到其他ID中,我们看会有怎么的效果;

[root@im_ctuallot1 tmp]# cat loginid.txt
xouqun76818
bao'pijkl
ogku15mtb7c
jinlongkaikai@163.com
曾朴绍283902
tingting831118
轻舞飞扬061129付了

[root@im_ctuallot1 tmp]# sed -e "s/^/delete from ctulog.db_allot_center_64 where long_id='/g" -e "s/$/';/g" loginid.txt > loginid.sql
[root@im_ctuallot1 tmp]# cat loginid.sql
delete from ctulog.db_allot_center_64 where long_id='xouqun76818';
delete from ctulog.db_allot_center_64 where long_id='bao'pijkl';
delete from ctulog.db_allot_center_64 where long_id='ogku15mtb7c';
delete from ctulog.db_allot_center_64 where long_id='jinlongkaikai@163.com';
delete from ctulog.db_allot_center_64 where long_id='曾朴绍283902';
delete from ctulog.db_allot_center_64 where long_id='tingting831118';
delete from ctulog.db_allot_center_64 where long_id='轻舞飞扬061129付了';

[root@im_ctuallot1 tmp]# mysql -uroot -h227.0.0.1 --default-character-set=latin1 --force ctulog < loginid.sql
ERROR at line 2: Unknown command '''.
ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'pijkl';
delete from ctulog.db_allot_center_64 where long_id='ogku15mtb7c';
delet' at line 1

会出现一堆这样的错误;
如果你手动把以上SQL贴到MYSQL中去执行:
root@127.0.0.1 : ctulog 15:59:04>
root@127.0.0.1 : ctulog 15:59:04> delete from ctulog.db_allot_center_64 where long_id='xouqun76818';
Query OK, 0 rows affected (0.00 sec)

root@127.0.0.1 : ctulog 15:59:05> delete from ctulog.db_allot_center_64 where long_id='bao'pijkl';
'> delete from ctulog.db_allot_center_64 where long_id='ogku15mtb7c';
'> delete from ctulog.db_allot_center_64 where long_id='jinlongkaikai@163.com';
'> delete from ctulog.db_allot_center_64 where long_id='曾朴绍283902';
'> delete from ctulog.db_allot_center_64 where long_id='tingting831118';
ERROR:
Unknown command '''.
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'pijkl';
delete from ctulog.db_allot_center_64 where long_id='ogku15mtb7c';
delet' at line 1
root@127.0.0.1 : ctulog 15:59:05> delete from ctulog.db_allot_center_64 where long_id='轻舞飞扬061129付了';
Query OK, 0 rows affected (0.00 sec)

root@127.0.0.1 : ctulog 15:59:10>

只有第一条,最后一条执行成功了; 

到这里我想大家应该明白了,
最关键的是单引号的不匹配导致MYSQL不能正确认识完整的SQL;
注意,在用户ID中,出现 单个单引号,或以""结束,都会有这个问题;

问题找到了,其实解决很简单,就是先把用户ID中的单引号和"$"作一个转换:
[root@im_ctuallot1 tmp]# cat loginid.txt
xouqun76818
bao'pijkl
ogku15mtb7c
jinlongkaikai@163.com
曾朴绍283902
tingting831118
轻舞飞扬061129付了
[root@im_ctuallot1 tmp]# sed -e "s///g" -e "s/'/'/g" -e "s/^/delete from ctulog.db_allot_center_64 where long_id='/g" -e "s/$/';/g" loginid.txt > loginid.sql
[root@im_ctuallot1 tmp]# cat loginid.sql
delete from ctulog.db_allot_center_64 where long_id='xouqun76818';
delete from ctulog.db_allot_center_64 where long_id='bao'pijkl';
delete from ctulog.db_allot_center_64 where long_id='ogku15mtb7c';
delete from ctulog.db_allot_center_64 where long_id='jinlongkaikai@163.com';
delete from ctulog.db_allot_center_64 where long_id='曾朴绍283902';
delete from ctulog.db_allot_center_64 where long_id='tingting831118';
delete from ctulog.db_allot_center_64 where long_id='轻舞飞扬061129付了';
[root@im_ctuallot1 tmp]#

是这样的SQL执行就不会有任何问题。

就这么简单的问题,耗了5个小时,还是SHARE一下以免大家在这里浪费时间。

关于如何进行MYSQL特殊字符的处理就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

曾朴 问题 用户 引号 数据 字符 任务 内容 方法 特殊 处理 成功 数据库 文件 更多 语句 错误 工作 帮助 不错 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 嵌入式软件开发的优缺点 涉密单位可以用云服务器吗 数据库的完整性有系统完整性么 数据库的科幻ppt图片 国家网络安全周金融日论坛 成都网络安全哪个学校 什么样的工作站可以做主机服务器 无锡工程软件开发公司哪家好 教育机构数据库管理系统 想定软件开发 利用万方数据库的体会 高校网络安全教育ppt课件 oncomine数据库关闭了 网络安全市场规模360 知道服务器管理ip怎么远程 安徽网络安全状况 网络安全病毒传播 搜索引擎和数据库的使用 网络安全教育和技术培训情况 每人天多少钱软件开发 奥哲网络安全手抄报 如何应对计算机网络安全 郑州电商软件开发招聘 代理服务器 人人 青岛一念之间网络技术服务部 数据从数据库到数仓 服务器装系统没有足够的安装空间 娱乐软件开发创业计划书 软件开发项目心得总结简短 网络安全法在线考试题库
0