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

Откуда:
Сообщений: 305
Установлен SQL SERVER 2005.Таблиц 866 кодировке.
Когда через odbc их забираю на vfp9 (?strconvert(fio,866,1251))в месте кирилицы не читаемые буквы появляется.
На другом компе установили SQL SERVER 2005 и залили туда эти таблицы(866).
Когда через odbc забираю на vfp9 ?strconvert(fio,866,1251) даеть нормалный результать.
Буквы читается как надо.Как найти причины?Может ODBC дарйвера обнавить?
18 май 11, 16:27    [10672813]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
puls,

а Вы форумом не ошиблись? на mssql нету функции strconvert

и что возвращает обычный селект из этих таблиц?
18 май 11, 16:39    [10672942]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
puls
Member

Откуда:
Сообщений: 305
WarAnt,Select не читаемые буквы вернет.
18 май 11, 16:53    [10673083]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
puls
WarAnt,Select не читаемые буквы вернет.


в обоих случаях?
18 май 11, 16:54    [10673104]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
puls
Member

Откуда:
Сообщений: 305
strconvert(fio,866,1251) - эта команда foxa.Конвертироеть из 866 на 1251.Это уже на стороне клиента работаеть.
18 май 11, 16:57    [10673128]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
Glory
Member

Откуда:
Сообщений: 104751
puls
Установлен SQL SERVER 2005.Таблиц 866 кодировке.

В SQL SERVER нет никаких кодировок кроме Unicode
Поэтому для начала убедитесь, что на ваших серверах физически хранятся одинаковые данные
18 май 11, 16:57    [10673129]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8877
Glory
puls
Установлен SQL SERVER 2005.Таблиц 866 кодировке.

В SQL SERVER нет никаких кодировок кроме Unicode
Поэтому для начала убедитесь, что на ваших серверах физически хранятся одинаковые данные

Ув. Glory, не сочтите меня сцукой, смущающей молодые пытливые умы, но:
1) создаём базу тест с параметрами:

К сообщению приложен файл. Размер - 58Kb
19 май 11, 00:36    [10675136]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8877
SIMPLicity_,

создаём таблицу:
USE [Test]
GO

/****** Object:  Table [dbo].[table]    Script Date: 05/19/2011 00:37:46 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[table](
	[varchar_50] [varchar](50) NULL,
	[nvarchar_50] [nvarchar](50) NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

19 май 11, 00:38    [10675148]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8877
SIMPLicity_,
вставляем:
insert into [table] 
select'test_string', 'test_string'

insert into [table] 
select'тестовая_строка', 'тестовая_строка'
19 май 11, 00:38    [10675152]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8877
SIMPLicity_,

стопорим сервер, смотрим базу FAR-ом - поиск по "test_string" и видим (см. текущую кодировку (1251)):

К сообщению приложен файл. Размер - 83Kb
19 май 11, 00:40    [10675157]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8877
SIMPLicity_,

Эм... Имеем: Юникод - к юникоду, 1251 - к 1251.

PS На двоичные нули и единицы, чур, переходить не будем...

PPS Ну это я так, для примера. Насчёт отсутствия отличных от Юникода кодировок...

===========
Эта, единственное, что
select @@version
:
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) 
Apr 2 2010 15:53:02
Copyright (c) Microsoft Corporation
Data Center Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)

19 май 11, 00:45    [10675175]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
Sergey Sizov
Member

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

стопорим сервер, смотрим базу FAR-ом - поиск по "test_string" и видим (см. текущую кодировку (1251)):
И эта всего лишь говорит фару интепретировать каждый символ как в кодировке 1251 и не более того. Пока вместо test_string стоИт t e s t _ s t r i n g ни о каких однобайтовых кодировках не может быть и речи.
19 май 11, 10:15    [10676062]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
Вообще для таких целей подобные данные надо смотреть-сверять в 16-ричном виде:

К сообщению приложен файл. Размер - 4Kb
19 май 11, 11:55    [10676857]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
puls
Member

Откуда:
Сообщений: 305
Вот решения вопроса.Может кому то нужен будет.
В BDE Configuration->Drivers->Native->DBASE->LangDrivers->dBase RUS 866.
Если BDE уcтановлен где SQL SERVER и BDE Configuration->Drivers->Native->DBASE->LangDrivers->другой, тогда возникает мой вопрос.
Тема закрыт.
19 май 11, 12:47    [10677364]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8877
Sergey Sizov
SIMPLicity_
SIMPLicity_,

стопорим сервер, смотрим базу FAR-ом - поиск по "test_string" и видим (см. текущую кодировку (1251)):
И эта всего лишь говорит фару интепретировать каждый символ как в кодировке 1251 и не более того. Пока вместо test_string стоИт t e s t _ s t r i n g ни о каких однобайтовых кодировках не может быть и речи.


Сергей, невнимательно смотрели:

test_string - это для 1251 (и 'тестовая_строка' - тоже)... а t e s t _ s t r i n g и херня рядом - вот это уже для юникода - см. структуру таблицы и порядок добавления строк в неё... Там два поя - варчарное и юникодовое (энварчарное). Посему test_string относится к варчарному, а t e s t _ s t r i n g - к юникодовому (ради чего и приведены скриншоты). Ну и для русских буков - аналогичная ситуация. Просто на примере русской строки 'тестовая_строка' мы видим побайтно как хранится информация. А хранится она именно (побайтно, для поля типа varchar для данной языковой кодировки базы) в 1251.

Вот собственно и всё.

ИМБО, конечно.

PS Во время съёмок ни один MSSQLServer не пострадал.
PPS И ваще, автор уже всё написал. так что это уже - оффтоп ... :)
19 май 11, 21:21    [10680999]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
iljy
Member

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

была тема, в которой выяснили, что в неюникодном текстовом поле для хранения данных используется кодировка в соответствии с заданным для поля collation.
19 май 11, 21:26    [10681008]     Ответить | Цитировать Сообщить модератору
 Re: Почему так происходить?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8877
iljy,

ок!, спасибо - напомнили. Почитал - поржал ... Но там не было ни слова о ФИЗИЧЕСКОМ (тьфу, мля, о байтах говорим уже как о предметах) хранении данных в базе. В принципе, и здесь я не совсем в тему "поднял голову"...
19 май 11, 22:37    [10681284]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить