none
汉字占用了4个字节,like失效的问题

    问题

  • 可以运行下列代码,‘𤋮’字是一个4字节的异体字,like失效,请问如何处理?

    CREATE    TABLE t3 (
      a int ,
      b nvarchar(10)
    )
    INSERT t3 VALUES(1,N'𤋮'),(2,'乎')

    select *,DATALENGTH(b) from t3 --得出占用的字节数

    select * from t3 where b like N'𤋮'
    select * from t3 where b like N'%𤋮%'--失效,不能达到目的

    如果是mysql,通过设置为utf8mb4字符集,发现是正常的

    2018年6月14日 13:56

答案

  • 用二进制排序就好

    比如

    CREATE    TABLE t3 (
      a int ,
      b nvarchar(10)  COLLATE Chinese_PRC_90_BIN
    )


    想不想时已是想,不如不想都不想。

    • 已标记为答案 wanyongwy 2018年6月14日 15:18
    2018年6月14日 14:37
    版主

全部回复

  • 用二进制排序就好

    比如

    CREATE    TABLE t3 (
      a int ,
      b nvarchar(10)  COLLATE Chinese_PRC_90_BIN
    )


    想不想时已是想,不如不想都不想。

    • 已标记为答案 wanyongwy 2018年6月14日 15:18
    2018年6月14日 14:37
    版主
  • 的确可以

    但是也带来了其它问题,比如要区分大小写了

    2018年6月14日 15:18
  • GB国标之外的字,碰到这个情况还真是比较麻烦

    SQL Server 2016 ~ 2000 性能优化、方案设计 QQ:315054403 田园嘉兴

    2018年6月15日 1:17
  • left等字符串函数也不能正常使用
    2018年6月15日 3:00
  • “𤋮”字代码为242EE,属于Unicode扩充B区字符,普通2字节存储方式是不能满足该字符的存储要求,

    因此字段属性nvarchar将其扩充为了4字节存储,当然不是原来的“𤋮”字。

    MS SQL like N''方式查询nvarchar字符,只适用于2字节表示的Unicode码,

    超过2字节的Unicode码转换为UTF-8方式表示较好,但MS SQL可能还不支持该类字段属性的表示。

    2018年6月15日 4:31