Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Varchar/nvacrchar  [new]
варчар
Guest
у мен винда русская.

Создал в таблице 2 столбца: varchar/nvarchar

для тестинга меняю у себя на компе язык с русского на украинский и пишу текст со специфичными буквами
їяї

почему в varchar пишется всё корректно? по описанию я так понял, что он должен поддерживать 2 языка: русский и англ

где я неправильно понял?
15 апр 12, 14:10    [12418802]     Ответить | Цитировать Сообщить модератору
 Re: Varchar/nvacrchar  [new]
iljy
Member

Откуда:
Сообщений: 8711
варчар,

буквально везде. Кодовая страница для varchar определяется предложением collation, если оно не указано - берется установленный по умолчанию для базы.
15 апр 12, 14:14    [12418810]     Ответить | Цитировать Сообщить модератору
 Re: Varchar/nvacrchar  [new]
варчар
Guest
iljy
варчар,

буквально везде. Кодовая страница для varchar определяется предложением collation, если оно не указано - берется установленный по умолчанию для базы.


у таблицы и базы указано Cyrillic_General_CI_AS.
я правильно понимаю, если я поменяю collation на какой то некириллический, то тогда будут кракозябры в базе?

зы. хочу понять как в базе получить кракозябры в базе тестовым путем
15 апр 12, 14:20    [12418823]     Ответить | Цитировать Сообщить модератору
 Re: Varchar/nvacrchar  [new]
iljy
Member

Откуда:
Сообщений: 8711
варчар,

create table #ttt (s1 varchar(10) collate Cyrillic_General_CI_AS,
					s2 varchar(10) collate Latin1_General_CI_AS)
					
					
insert #ttt values(N'фыва', N'фыва')

select * from #ttt
drop table #ttt
15 апр 12, 14:23    [12418826]     Ответить | Цитировать Сообщить модератору
 Re: Varchar/nvacrchar  [new]
варчар
Guest
iljy
варчар,

create table #ttt (s1 varchar(10) collate Cyrillic_General_CI_AS,
					s2 varchar(10) collate Latin1_General_CI_AS)
					
					
insert #ttt values(N'фыва', N'фыва')

select * from #ttt
drop table #ttt


продолжил тестить глубже с вашим примером
сделал базу с кодировкой Latin1_General_CI_AS

и одну таблицу
create table #ttt (s1 varchar(10) collate [b]Latin1_General_CI_AS[/b],
					s2 [b]nvarchar[/b](10) collate Latin1_General_CI_AS)


а почему когда делаю вставку из менеджмент студии

  insert [Names] values(N'фыва', N'фыва')


вставка проходит как я ожидаю: в первом столбце кракозябры, во втором фыва

а вот когда вставку делаю с сайта, то в обоих столбцах кракозябры. что и где меняется. где надо что исправить?

  var query = string.Format("INSERT INTO Names (s1, s2) Values ('{0}', '{1}')", text, text);
                using (SqlConnection conn = new SqlConnection("Integrated Security=SSPI;" + 
                                       "server=pc1\\sqlexpress;" + 
                                       "Trusted_Connection=yes;" + 
                                       "database=test3; " + 
                                       "connection timeout=30"))
                using (SqlCommand cmd = new SqlCommand(query, conn))
                {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                }
            }
15 апр 12, 19:30    [12419520]     Ответить | Цитировать Сообщить модератору
 Re: Varchar/nvacrchar  [new]
iljy
Member

Откуда:
Сообщений: 8711
варчар,

create database Test
go
use Test
create table ttt (s1 nvarchar(10) collate Cyrillic_General_CI_AS,
					s2 nvarchar(10) collate Latin1_General_CI_AS)
go
alter database Test collate Latin1_General_CI_AS
go
										
insert ttt values(N'фыва', N'фыва'),('фыва', 'фыва')

alter database Test collate Cyrillic_General_CI_AS
go
insert ttt values(N'фыва', N'фыва'),('фыва', 'фыва')

select * from ttt
drop table ttt
go
use tempdb
drop database Test
15 апр 12, 19:41    [12419537]     Ответить | Цитировать Сообщить модератору
 Re: Varchar/nvacrchar  [new]
варчар
Guest
iljy
варчар,

create database Test
go
use Test
create table ttt (s1 nvarchar(10) collate Cyrillic_General_CI_AS,
					s2 nvarchar(10) collate Latin1_General_CI_AS)
go
alter database Test collate Latin1_General_CI_AS
go
										
insert ttt values(N'фыва', N'фыва'),('фыва', 'фыва')

alter database Test collate Cyrillic_General_CI_AS
go
insert ttt values(N'фыва', N'фыва'),('фыва', 'фыва')

select * from ttt
drop table ttt
go
use tempdb
drop database Test


что-то я не понял магию. почему первая и вторая строки отличаются?
автор
фыва фыва
???? ????
фыва фыва
фыва фыва
15 апр 12, 20:01    [12419584]     Ответить | Цитировать Сообщить модератору
 Re: Varchar/nvacrchar  [new]
iljy
Member

Откуда:
Сообщений: 8711
варчар,

а вы внимательно посмотрите, чем отличается их вставка в таблицу.
15 апр 12, 20:03    [12419589]     Ответить | Цитировать Сообщить модератору
 Re: Varchar/nvacrchar  [new]
варчар
Guest
iljy
варчар,

а вы внимательно посмотрите, чем отличается их вставка в таблицу.


понял.
резюмиряя, правильно я понимаю, что варчар корректно будет сохранять язык в соотвествии с коллейшном, т.е. если колейшн один, а строка приходит в другом языке, то будет бяка, а nvarchar для всех корректно будет сохранять?

зы.
а зачем вы написали?

use tempdb
15 апр 12, 20:16    [12419615]     Ответить | Цитировать Сообщить модератору
 Re: Varchar/nvacrchar  [new]
iljy
Member

Откуда:
Сообщений: 8711
варчар
iljy
варчар,

а вы внимательно посмотрите, чем отличается их вставка в таблицу.


понял.
резюмиряя, правильно я понимаю, что варчар корректно будет сохранять язык в соотвествии с коллейшном, т.е. если колейшн один, а строка приходит в другом языке, то будет бяка, а nvarchar для всех корректно будет сохранять?

Нет. В таблице оба поля nvarchar.

варчар
зы.
а зачем вы написали?

use tempdb

Иначе не удалить временную базу Test.
15 апр 12, 20:18    [12419618]     Ответить | Цитировать Сообщить модератору
 Re: Varchar/nvacrchar  [new]
zeha_t
Member

Откуда:
Сообщений: 32
iljy,

Cпасибо. Теперь ясно
17 апр 12, 11:38    [12426200]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить