资料库之间"字母符号比较"测试

今天回答IT邦友问题
MYSQL 搜寻字母符号问题 - iT 邦帮忙::一起帮忙解决难题,拯救 IT 人的一天

资料库是mysql,
搜寻žř这样的特殊文字会被当成zr来处理,
请问有什么解决办法呢?
比如有2笔资料分别是žybřidcz和zybridcz,
我下指令
select * from TestTable where text= 'žybřidcz' 或
select * from TestTable where text= 'zybridcz'
结果2笔都会出来.

看到后面一级屠猪士大大使用Postgresql轻鬆解决问题
所以想去比较不同资料库之间的差异


先準备测试资料

|     text ||----------||     tuấn ||     tuan || žybřidcz || zybridcz |

MySQL:

假如只单纯使用=,会发现四个值都被查询出来

select *  from TestTable where text = 'žybřidcz' or text = 'tuan';|     text ||----------||     tuấn ||     tuan || žybřidcz || zybridcz |

需要使用HEX或是INSTR才能筛选掉

select * from TestTable where INSTR(text,'tuan') > 0 or INSTR(text,'žybřidcz') > 0;select * from TestTable where HEX('tuan')  = HEX(text) or HEX('žybřidcz')  = HEX(text);  |     text ||----------||     tuan || žybřidcz |        

另外还有大小写问题,查询text = 'TUAN'可以查到资料tuan跟tuấn

select * from TestTable where text = 'TUAN';| text ||------|| tuấn || tuan |

附上:线上测试连结


SQL Server:

假如只单纯使用=不会有问题

select * from TestTablewhere text = 'žybřidcz' or text = 'tuan';|     text ||----------||     tuan || žybřidcz |

但是,会有大小写问题
查询text = 'TUAN'可以查到资料tuan

select * from TestTablewhere text = 'TUAN';|     text ||----------||     tuan |

可以参考我之前在SO回答的问题
sql server - SQL upper/lower + substring not working well - Stack Overflow
使用COLLATE Latin1_General_CS_AS或是ASCII解决

附上:线上测试连结


Postgresql跟Oracle:

不需要Hex、collate直接=比较就可以,也没有大小写问题
附上:Postgresql线上测试连结
附上:Oracle线上测试连结

select * from TestTablewhere text = 'žybřidcz' or text = 'tuan'; |     text ||----------||     tuan || žybřidcz |

总结:

资料库特殊字母符号定序问题字母定序大小写问题MySQL有有sql-server无有Postgresql无无Oracle无无

假如大大们知道原理,或是有其他看法都可以讨论。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章