如何在SSMS中创建支持Unicode的表?希伯来字符显示异常求助
解决希伯来字符显示异常&创建支持Unicode的表
嘿,我来帮你搞定这个问题!你现在遇到的希伯来字符显示乱码,根源在于用了VARCHAR类型——它是单字节字符集,依赖数据库默认排序规则,根本没法正确存储Unicode字符(比如希伯来文、中文这类非英文的字符)。要支持Unicode,得换用NVARCHAR类型,还要注意插入字符串的小细节。
正确的表创建&操作语句
直接给你改好的代码,替换你原来的语句就行:
DROP TABLE IF EXISTS ABCD; -- 加IF EXISTS避免表不存在时报错 CREATE TABLE ABCD( AAA INT, BBB NVARCHAR(100) -- 把VARCHAR换成NVARCHAR,这是Unicode专用类型 ); INSERT INTO ABCD(AAA, BBB) VALUES(1, N'אאא'); -- 字符串前面一定要加N前缀! SELECT * FROM ABCD; SELECT * FROM ABCD WHERE BBB LIKE N'%א%'; -- 模糊查询时字符串也要加N前缀
几个关键要点给你理清楚
NVARCHAR才是Unicode的正确选择:NVARCHAR每个字符占用2字节(特殊字符可能更多),能存储全球所有语言的字符;而VARCHAR是单字节,只能存对应字符集里的字符,希伯来文不在默认单字节集里,所以显示乱码。N前缀不能忘:不管是插入还是查询Unicode字符串,都要在字符串前加N,这是告诉SQL Server“这是Unicode字符串,别转成单字节处理”,不然哪怕字段是NVARCHAR,字符还是会丢失或乱码。- 可选:指定希伯来文排序规则:如果你的数据库默认排序规则不是希伯来文相关的,还可以在创建字段时指定,让排序、比较更准确:
不过哪怕不指定,只要用CREATE TABLE ABCD( AAA INT, BBB NVARCHAR(100) COLLATE Hebrew_CI_AS );NVARCHAR加N前缀,希伯来字符也能正常显示和存储。
为什么你原来的语句不行?
你之前用VARCHAR存希伯来文,SQL Server会把这些字符转成默认单字节集里的替代字符(比如问号或者乱码),所以显示不正常,连查询也可能出问题。换成NVARCHAR并加上N前缀后,就能完美解决啦。
内容的提问来源于stack exchange,提问作者barlop
相关产品推荐
相关产品推荐

