[ЭТО НЕ ВОПРОС О NVARCHAR ИЛИ КАК ХРАНИТЬ Китайский иероглиф]SQL набор символов сервера и N префикс
SQL Server 2008 Express
Database сверка является SQL_Latin1_General_CP1_CI_AS
create table sample1(val varchar(2))
insert into sample1 values(N'中文')
- Я знаю, что эти китайские иероглифы станут мусорными символами.
- Я знаю, что могу использовать nvarchar для преодоления всех проблем.
Что я не знаю: почему нет ошибки «слишком длинной строки» при запуске инструкции insert?
- Префикс N означает, что клиент будет кодировать строку, используя UNICODE.
- 2 китайских символа станут 4 байтами.
- varchar (2) может содержать только 2 байта.
Почему люди голосуют за этот вопрос? действительно?
Ну, SQL Server видит, что вы вставляете в столбец 'varchar', и поэтому он автоматически преобразует эту строку, которую вы передали, в строку, не совместимую с unicode, varchar, состоящую из двух символов , Два символа не слишком велики для хранения этого столбца .... –
Первое, что varchar не может хранить такие символы напрямую, он преобразует их, поэтому обычно мы используем nvarchar. вы можете попробовать создать таблицу sample3 (val nvarchar (2)) Вставить в значения sample3 (N '中文') –
Я знаю, что это не вопрос сохранения китайского. Как я уже говорил, подразумевается актерский состав и хранит его в вашем varchar как "??" (по крайней мере, на моей кодовой странице) – Paul