昨天晚上在班级的qq群里 小新提出了一个sql语句问题:
select * from Products where ProductName = '%Gustaf's Knäckebröd%'
无法执行成功,刚开始我们以为是转义字符的问题,于是改成:select * from Products where ProductName = '%Gustaf''s Knäckebröd%'
但是发现还是不行,刚开始他们觉得Knäckebröd是个乱码,由于我刚好学过一点点德语,我认识Knäckebröd是一个德语单词面包皮的意思,所以我们开始想是不是sqlserver不支持德语单词呢,小灰经过试验(具体试验我还真不清楚怎么进行,哈哈,下次问问他,可能是他把德语单词换成英文了吧:-))提出是德语单词Knäckebröd在sql server数据库不受支持的问题,于是小黄找到了怎样让德语单词也受支持,
他说看到过一个贴子,贴子内容如下:
看到SQL SERVER自己生成的脚本,字符串前通常都加一个N字母。
请问这个N说明什么含义?加与不加在SQL编写上有何影响?
答:是Unicode编码的意思,一般来说,英文字符是一个字节组成,但是国际上的字太多了,因此就用两个字节来表示字符,满足国际化的需要.
那么怎么让Unicode支持德语呢或者其他国际字呢,答案就是 加一个'N'字符
所以我们最初的sql语句应该这样改: select * from Products where ProductName = N'%Gustaf's Knäckebröd%'
查询通过,问题解决:-)
今天一个学妹在写Ext+php+mysql的时候也遇到了数据库编码问题,问题如下:
sql:
insert into table1(ID,other,major) values (1,'你好','你好')
语句执行失败
随后把'你好','你好'改成'hello','hello',语句执行成功。
很明显是中文编码不被支持
于是我想起了昨晚同样的办法,并且在网上搜索关键字:“mysql数据库无法插入中文字符”,并找到了和昨天一样的解决方法
她的mysql数据库的编码是utf-8,
于是我把原句改成:insert into table1(ID,other,major) values (1,utf-8'你好',utf-8'你好')
语句执行成功,数据成功插入。
根据以上经验,我得出,在sql语句里加中文或者其他非英语字的时候可以通过以上方法修改其编码方式。