Это чисто теоретический вопрос, чтобы обернуть мою голову вокругКак данные Unicode (UTF-16), которые находятся вне сортировки, хранятся в столбце varchar?
Скажем, у меня есть Unicode
циклонного символ (1F300
). Если я пытаюсь сохранить его в varchar
столбца, по умолчанию Latin1_General_CI_AS
сортировки, символ циклона не может не поместиться в один байт, который используется на символ в varchar
...
способов, я могу видеть это сделать:
- Как и javascript для символов из базовой плоскости (BMP), где он хранит их как 2 символа (суррогатные пары), а затем требуется дополнительная обработка для put them back together ...
- Просто усечь символ, сохранить первый байт и отбросить второй .... (данные - это тост - вы должны были прочитать руководство ....)
- Данные уничтожаются, и ничего не используется ... (данные - это тост - вы должны были прочитать руководство ....)
- Некоторые другие варианты, которые находятся вне моей умственной способности .....
Я сделал некоторые исследования после вставки несколько различных юникод символов
INSERT INTO [Table] (Field1)
VALUES ('')
INSERT INTO [Table] (Field1)
VALUES ('')
, а затем читать их как байты SELECT cast (field1 as varbinary(10))
в обоих случаях я получил 0x3F3F
.
3F
в ascii
является ?
(question mark) например два вопросительных знака (??
), что я вижу, когда делать нормальный select *
значит ли это, что данные тосты и даже не первого укуса хранится?
Как данные Unicode, которые не сортируются, хранятся в столбце varchar?
Привет, Алекс, спасибо за ответ. Интересно, почему два '??' вместо 1 '?', Чувствуют себя как оскорбление раны, lol ... –