求 sql 大神帮忙

2016-08-03 21:36:41 +08:00
 hailongs

表如下:

id name

1 赠品 2 礼品 3 姑娘

如果我用以下 sql 直接在终端上敲 select * from table where name not like '%赠品%' 结果会返回: id 为 2 和 3 的记录。

目前的需求是:

我的这个 sql 不直接写在程序里,而是写在文本文件中。 文本文件是 vim 写的,编码格式是 utf-8 的,这样在程序读这个文本文件的时候,“赠品”这两个中文词肯定会出错。读出来运行 sql 肯定出来的也是这三条记录,没有达到过滤的目的。

我想要的结果:

1.不更改 vim 编码环境,不然后期维护 sql 很麻烦。因为数据库中,需要用中文排除的记录比较多。 2.我还是想用 sql 直接写。想了下,数据库编码是 gbk 的,如果我把“赠品”这两个字的用 gbk 编码后,转换成 16 进制的,应该是可行的。可是在 google 查过之后,还是没有达到预期效果。 google 的解决方法是: f9 c6 b7 select * from table where name not like '%'+CHAR(0xd4)+CHAR(0xf9)+CHAR(0xc6)+CHAR(0xb7) +'%'

希望得到帮助!

2238 次点击
所在节点    MySQL
8 条回复
zhx1991
2016-08-03 22:17:13 +08:00
我怎么感觉是程序读的时候编码问题
billlee
2016-08-03 22:28:45 +08:00
如果程序写得正确,从文本文件读取 UTF-8 是不会出错的,查询也是能够正常进行的。
klesh
2016-08-03 22:35:36 +08:00
真是奇怪的设计。
既然你知道是 utf-8 的话,那就按 utf-8 编码去读就 OK 了吧。就我有接触的编程语言标准类库中都含有按编码读取文本文件的功能。
msg7086
2016-08-04 03:24:02 +08:00
考虑到你连用的什么语言都没写,那我就姑且推荐一下 SET NAMES UTF8 吧。
gdtv
2016-08-04 07:35:29 +08:00
首先把这句 sql 直接写到程序代码里,运行,看正确不正确。
用程序读文本里的 sql , print 出来看下有没有乱码,如果乱了,就转换一下编码。
ebony0319
2016-08-04 09:01:16 +08:00
其实我想问为什么一定要用 %赠品%',我们写的时候都是用一个基础表链接出去,或者使用 id 去查询。让用户选择中文,转换为 id 去查询的哇。
hailongs
2016-08-04 10:04:35 +08:00
@billlee 数据库字段存储的编码类型是 gbk 的。我文本文件的类型是 u8 的,程序读 u8 的肯定没问题,读上来的这个 字段 名字是 u8 编码过的,在用 u8 编码过的字段 去查 gbk 的数据库,肯定有问题呀。
hailongs
2016-08-04 12:06:32 +08:00
解决了。不过 sql 没解决。没找到方法。最终解决的方法是 在程序中执行 sql 前,把 sql 串 -> gbk 了。。。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/296939

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX