這是純粹的理論問題來包裹我的腦袋超出排序規則的Unicode(UTF-16)數據如何存儲在varchar列中?
比方說我有Unicode
cyclone(1F300
)符號。如果我試圖將其存儲在具有默認Latin1_General_CI_AS
整理varchar
列,旋風符號不可不適合一個字節即每個符號用於varchar
...
的方法,我可以看到這個工作:
- 像JavaScript一樣使用基本平面符號(BMP),它將它們存儲爲2個符號(代理對),然後需要額外的處理以便put them back together ...
- 只需截斷符號,存儲第一個字節並刪除第二....(數據是烤麪包 - 你應該閱讀手冊....)
- 數據被破壞,沒有任何使用被保存...(數據是烤麪包 - 你應該已經閱讀手冊....)
- 一些其他選項,是我的心智能力以外.....
我已經將幾個不同的Unicode符號
INSERT INTO [Table] (Field1)
VALUES ('')
INSERT INTO [Table] (Field1)
VALUES ('')
,然後在這兩種情況下我得到了0x3F3F
閱讀他們作爲一個字節SELECT cast (field1 as varbinary(10))
後做了一些研究。
在ascii
3F
是?
(question mark)e.g兩個問號(??
),我也看到在做正常時select *
這是否意味着數據是烤麪包和連咬一號正在存儲?
超出排序規則的Unicode數據如何存儲在varchar列中?
嗨,亞歷克斯,謝謝你的回答。我想知道爲什麼兩個'??'而不是1'?',感覺像是對傷害的侮辱,哈哈...... –