Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

MS SQL Server Unicode

252  1 2 все
krys посетитель13.07.06 13:52
NEW 13.07.06 13:52 
Привет, у меня такой вопрос
я работаю сMS SQL Server 2000
В одной из таблиц моей базы данных существует колонка Label типа nvarchar (Тип поддерживает Unicode)
Я копирую из Excel Документа китайские знаки: в таблице эти знаки заменяются на ???? .
стойте там и слушайте сюда, именно отсюда будет проистекать
#1 
krys посетитель13.07.06 14:25
NEW 13.07.06 14:25 
в ответ krys 13.07.06 13:52
Прошу прощения за неточность:
китайские знаки заменяютя на квадратики :).
Интересно что после того как я этот символ скопировал в сообщение , я получил снова китайский символ: 释
что это может означать?
стойте там и слушайте сюда, именно отсюда будет проистекать
#2 
  digital_pilot авиатор х#ев13.07.06 19:04
NEW 13.07.06 19:04 
в ответ krys 13.07.06 13:52
а как ты копируешь и почему думаешь, что иероглифы заменяются на квадратики именно в базе? (может это проблема твоего клиента, который не умеет правильно воспроизводить иероглифы?)
#3 
krys посетитель13.07.06 23:03
NEW 13.07.06 23:03 
в ответ digital_pilot 13.07.06 19:04
потому что я вручную копирую знаки из Excel 'я.
в WordPad'e я просто переключил кодировку на Arial Unicode MS
и вместо квадратика я получил йероглиф.
Можно ли что то подобное сделать В SQL Manager'e?
стойте там и слушайте сюда, именно отсюда будет проистекать
#4 
AlterEgo Чеширръ14.07.06 00:25
AlterEgo
NEW 14.07.06 00:25 
в ответ krys 13.07.06 23:03
Может просто SQL Manager пользуется фонтом, не имеющим китайских символов.. Я бы порекомендовал написать программулину на C# или С++ (Unicode project) что бы перегнать текст в БД.. :)
*Ъ...
#5 
krys посетитель14.07.06 09:34
NEW 14.07.06 09:34 
в ответ AlterEgo 14.07.06 00:25
Программа есть. Я Использую MFC RecordSet и ODBC драйвер.
Но как выяснилось. но в данном случае Символы не распознаются (?????). (The MFC framework is Unicode-enabled throughout, except for the database classes. (ODBC is not Unicode-enabled.) )
Может мне кто то подсказать идею как с минимальными изменениями ( я имею ввиду что я и дальше могу использовать МФЦ RecordSet) вытащить знаки из Excel Таблицы и в последствии также из базы данных?
_Unicode, Unicode в Препроцессор-дефиниции прописаны
стойте там и слушайте сюда, именно отсюда будет проистекать
#6 
Simple Nothing is f*cked14.07.06 11:19
Simple
NEW 14.07.06 11:19 
в ответ krys 14.07.06 09:34
Используй ADO. В понедельник, если не забуду, отсканю пару страниц из книги, но думаю, ты быстрее найдешь это в MSDN.
#7 
Murr коренной житель14.07.06 11:50
Murr
NEW 14.07.06 11:50 
в ответ Simple 14.07.06 11:19
ADO использует указанный драйвер. В данном случае - ODBC, не поддерживающий Unicode.
#8 
Simple Nothing is f*cked14.07.06 12:11
Simple
NEW 14.07.06 12:11 
в ответ Murr 14.07.06 11:50
Другой ему подсунуть нельзя?
#9 
  digital_pilot авиатор х#ев14.07.06 13:12
NEW 14.07.06 13:12 
в ответ Simple 14.07.06 12:11


Ыксперимента ради сделал счас тест 2-мя способами: через провайдера SQLOLEDB и через ODBC-драйвер для SQL Server'а.
тестовый скрипт:
В ответ на:
IF OBJECT_ID('pelod') IS NOT NULL DROP TABLE [pelod]
CREATE TABLE [pelod] (
[source] NVARCHAR (100) NOT NULL UNIQUE,
[target] NVARCHAR (100) NOT NULL DEFAULT ''
)
GRANT ALL ON [pelod] TO public
INSERT [pelod] ([source]) VALUES(N'Mittelmäßiger Übersetzer = Посредственный переводчег.')
INSERT [pelod] ([source]) VALUES(N'Blöde Ärsche - Убейте себя апстенку, ослы!')
GO

тестовый VB-скрипт (читает строчки на клиента и потом обратно пишет их в таблицу. Ну, на практике - глупость, это исключительно чтоб строчки туда-сюда погонять через провайдера). В скрипте 2 коннекшн-стринга для опытов.
В ответ на:

g_Provider = "SQLOLEDB"
g_Server = "."
g_DB = "pelod_db"
g_Login = "sa"
g_Password = "****"
g_DSN = "pelod_dsn"
Set conn = CreateObject("ADODB.Connection")
ConnStr = "Provider=" & g_Provider & ";Data Source=" & g_Server & ";database=" & g_DB & ";User ID=" & g_Login & ";password=" & g_Password & ";"
'ConnStr = "DSN=" & g_DSN & ";Database=" & g_DB & ";UID=" & g_Login & ";password=" & g_Password & ";"
conn.Open ConnStr
Set rs = conn.Execute("SELECT [source] FROM [pelod]")
Do Until rs.EOF
conn.Execute "UPDATE [pelod] SET [target] = N'copy: " & cstr(rs("source")) & "' WHERE [source] = N'" & cstr(rs("source")) & "'"
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
Conn.Close
Set conn = Nothing
MsgBox "Done."

ну и под конец делаем SELECT * FROM [pelod] и получаем в обоих случаях
source target
---------- ----------
Mittelmäßiger Übersetzer = Посредственный переводчег. copy: Mittelmäßiger Übersetzer = Посредственный переводчег.
Blöde Ärsche - Убейте себя апстенку, ослы! copy: Blöde Ärsche - Убейте себя апстенку, ослы!

#10 
Murr коренной житель14.07.06 13:15
Murr
NEW 14.07.06 13:15 
в ответ Simple 14.07.06 12:11
Зависит от задачи и от того, как ее написали. В большинстве случаев - не получается просто дать другой драйвер, но приходится еще рыть код.
#11 
Murr коренной житель14.07.06 13:19
Murr
NEW 14.07.06 13:19 
в ответ digital_pilot 14.07.06 13:12
Ты бы еще версию/дату/размер либ/драйверов добавил - был бы полный ажур...
#12 
  digital_pilot авиатор х#ев14.07.06 13:23
NEW 14.07.06 13:23 
в ответ Murr 14.07.06 13:19
на клиенте - ффсе ODBC-драйвера и MDAC стандартные с xp pro sp2
#13 
toptop знакомое лицо14.07.06 13:43
NEW 14.07.06 13:43 
в ответ digital_pilot 14.07.06 13:23, Последний раз изменено 14.07.06 13:43 (toptop)
А могит у него в настройках что-нить почекано. Язык там или конвертирование?
#14 
krys посетитель14.07.06 13:56
NEW 14.07.06 13:56 
в ответ digital_pilot 14.07.06 13:12
Шеф говорит что MFC RecordSet должен уникод подерживать. так поддерживает или нет? Если да то в чем может быть причина что символы не распознаются?
стойте там и слушайте сюда, именно отсюда будет проистекать
#15 
  digital_pilot авиатор х#ев14.07.06 13:59
NEW 14.07.06 13:59 
в ответ toptop 14.07.06 13:43
х.з. :) вообще, фтопку этот ODBC :)
#16 
  digital_pilot авиатор х#ев14.07.06 14:00
NEW 14.07.06 14:00 
в ответ krys 14.07.06 13:56
может их клиент не распознает, может они при копировании портятся. Попробуй через DTS
#17 
Murr коренной житель14.07.06 14:20
Murr
14.07.06 14:20 
в ответ digital_pilot 14.07.06 13:23
У меня этих стандартных MDAC'ов во времена NT4 SP6 было штук 20-ть...
Что интересно - при программировании на CBuilder'e 5.0 SP4 работоспособный код получался только при двух версиях...
#18 
  scorpi_ скептик14.07.06 14:26
NEW 14.07.06 14:26 
в ответ Murr 14.07.06 14:20
В ответ на:
работоспособный код получался только при двух версиях...

Он у тебя вообще редко работоспособным получается...
#19 
  digital_pilot авиатор х#ев14.07.06 14:45
NEW 14.07.06 14:45 
в ответ Murr 14.07.06 14:20
те времена прошли, сейчас с MDAC'ами проблемы лично у меня очень редки, гораздо реже, чем раньше. Вот, кстати, сегодня только что разобрался с 1 из них - то была 1-я за последние года 2. Вылечилась опять же в полпинка патчиком с сайта MS.
#20 
1 2 все