Cette question est purement théorique pour envelopper ma tête autourComment les données Unicode (UTF-16) hors collation sont-elles stockées dans la colonne varchar?
Disons que je Unicode
cyclone (1F300
) symbole. Si je tente de le stocker dans varchar
colonne qui a le classement par défaut Latin1_General_CI_AS
, symbole de cyclone ne peut pas entrer dans un octet qui est utilisé par symbole dans varchar
...
Les façons que je peux voir ce faire:
- Comme javascript fait pour les symboles hors du plan de base (BMP) où il les stocke comme 2 symboles (paires de substitution), puis un traitement supplémentaire est nécessaire pour put them back together ...
- Juste tronquer le symbole, stocker le premier octet et déposez le deuxième .... (les données sont toast - vous auriez dû lire le manuel ....)
- Les données sont détruites et rien d'utilisé n'est sauvegardé ... (les données sont toast - vous auriez dû lire le manuel ....)
- Une autre option qui est en dehors de ma capacité mentale .....
je l'ai fait quelques recherches après l'insertion ou deux symboles différents unicode
INSERT INTO [Table] (Field1)
VALUES ('')
INSERT INTO [Table] (Field1)
VALUES ('')
puis de les lire en octets SELECT cast (field1 as varbinary(10))
dans les deux cas que j'ai eu 0x3F3F
.
3F
dans ascii
est ?
(question mark) deux marques par exemple question (??
) que je vois aussi quand faire normale select *
ce que cela signifie que les données sont du pain grillé et pas même 1ère morsure est stockée?
Comment les données Unicode hors collation sont-elles stockées dans la colonne varchar?
Salut Alex, merci pour la réponse. Je me demande pourquoi deux '??' au lieu de 1 '?', Se sent comme une insulte à la blessure, lol ... –