鉴于此表:
CREATE TABLE test ( id INT NOT NULL,description NVARCHAR(100) COLLATE Modern_Spanish_CI_AS NOT NULL ); INSERT INTO test (id,description) VALUES (1,'CO2');
我意识到我无法解决排版问题:
SELECT * FROM test WHERE id = 1; UPDATE test SET description = 'CO₂' WHERE id = 1; SELECT * FROM test WHERE id = 1;
因为更新匹配但没有效果:
id description ----------- ----------- 1 CO2 (1 affected rows) (1 affected rows) id description ----------- ----------- 1 CO2 (1 affected rows)
就好像sql Server确定的那样,因为²显然只是一个很小的2,所以最终值不会改变,因此不值得改变它.
有人可以对此有所了解并可能建议一个解决方法(除了更新中间值)?
解决方法
下标2不是varchar字符集的一部分(在任何排序规则中,不仅仅是Modern_Spanish).所以使它成为一个nvarchar常量:
UPDATE test SET description = N'CO₂' WHERE id = 1;