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

Откуда:
Сообщений: 358
Есть таблица:

CREATE TABLE tb1
(
   C1 int  NULL,
   C2 NVARCHAR(200)   NULL
)


Загружаю с помощью bcp.exe файл вида в данную таблицу:

1	ЩДЫЙЦ
2	Hello
3	ВИБЮ



fmt файл:

6.0
2
1      SQLCHAR      0       39     "\t"                          1                C1
2      SQLCHAR      0       200    "\r\n"                        2                C2


bcp.exe db1..tb1 in tb1.txt -f tb1.fmt -e tb1.err -m 10 -t\t -r\n -E -C RAW  -U sa -P test -S serv1 -b1000 -k


В итоге в таблицу загружаются кракозяблы, если пробую в МС студии через инсерты вида
insert into tb1 values(2,N'ПЖЩЙЦУК')
, то все отлично.

Возможно что-то не учитываю при загрузке через bcp.exe?
6 май 15, 19:17    [17609458]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
SQLNCHAR
6 май 15, 19:23    [17609485]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
stavelot
Member

Откуда:
Сообщений: 358
Гавриленко Сергей Алексеевич
SQLNCHAR


Пробовал:

Меняю формат файл:

6.0
2
1      SQLCHAR      0       39     "\t"                          1                C1
2      SQLNCHAR      0       200    "\r\n"                        2                C2


Ошибка:

Starting copy...
SQLState = S1000, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Unexpected EOF encountered in
BCP data-file
6 май 15, 19:32    [17609519]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
stavelot
Member

Откуда:
Сообщений: 358
текстовый файл с данными естественно в кодировке utf8 w/o BOM
6 май 15, 19:39    [17609544]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
stavelot
текстовый файл с данными естественно в кодировке utf8 w/o BOM
http://blogs.msdn.com/b/gongcheng/archive/2010/03/20/how-to-import-utf8-encoded-string-into-sql-server-using-bcp-utility.aspx
6 май 15, 20:43    [17609717]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
UTF-8 - это не Unicode.
7 май 15, 12:15    [17612056]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
o-o
Guest
Владислав Колосов
UTF-8 - это не Unicode.

и давно?
не, ну строго говоря, ето конечно ENCODING, но ведь, извиняюсь,
UTF-8 (U from Universal Character Set + Transformation Format—8-bit[1]) is a character encoding
capable of encoding all possible characters (called code points) in Unicode.


т.е. если SQL Server хранит юникод в UTF-16 (UCS-2),
то это юникодные строки, а если кто-то те же строки хранит в UTF-8, то они уже не юникодные что ли?
7 май 15, 12:54    [17612283]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
o-o, я писал о том, что то, что сиквел называет Unicode на является UTF-8 представлением Unicode формата.
7 май 15, 13:27    [17612583]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
stavelot
Member

Откуда:
Сообщений: 358
invm
stavelot
текстовый файл с данными естественно в кодировке utf8 w/o BOM
http://blogs.msdn.com/b/gongcheng/archive/2010/03/20/how-to-import-utf8-encoded-string-into-sql-server-using-bcp-utility.aspx


Все бы конечно хорошо, но в данных есть \t , который воспринимается bcp как разделитель и мой fmt файл игнорируется, если ставлю опцию -w (Warning: -w overrides -f.), поэтому загрузить данные все равно не выходит
8 май 15, 14:04    [17618010]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavelot
но в данных есть \t , который воспринимается bcp как разделитель

А как его еще можно воспринимать, если он указан как разделитель ?
8 май 15, 14:06    [17618026]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
stavelot
Member

Откуда:
Сообщений: 358
Glory
stavelot
но в данных есть \t , который воспринимается bcp как разделитель

А как его еще можно воспринимать, если он указан как разделитель ?


Тогда вопрос остается открытым: Как загрузить мультиязычный файл (c \t и \n в данных) в SQL Server с помощью bcp. В какой кодировке должен быть файл с данными?
8 май 15, 14:15    [17618087]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavelot
(c \t и \n в данных)

Вы используете одни и теже символы и как разделители и как данные ?
8 май 15, 14:19    [17618110]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
stavelot
Member

Откуда:
Сообщений: 358
Glory
stavelot
(c \t и \n в данных)

Вы используете одни и теже символы и как разделители и как данные ?


Да, в данных встречаются и \t и \n
8 май 15, 14:44    [17618274]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavelot
Glory
пропущено...

Вы используете одни и теже символы и как разделители и как данные ?


Да, в данных встречаются и \t и \n

И как по-вашему отличить одно от другого ? разделитель от данных ?
8 май 15, 14:46    [17618287]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
stavelot
Member

Откуда:
Сообщений: 358
Glory
stavelot
пропущено...


Да, в данных встречаются и \t и \n

И как по-вашему отличить одно от другого ? разделитель от данных ?


Сорри, не так понял, разделители я указываю другие, а в данных просто есть и \t и \n, но при использовании опции -w данные не грузятся
8 май 15, 15:08    [17618441]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavelot
Сорри, не так понял, разделители я указываю другие, а в данных просто есть и \t и \n, но при использовании опции -w данные не грузятся

Ну так сразу все стало понятно
- и строка запуска
- и пример данных
- и текст ошибка

У вас ошибка в 17ой строке
8 май 15, 15:09    [17618458]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
stavelot
Member

Откуда:
Сообщений: 358
Glory
stavelot
Сорри, не так понял, разделители я указываю другие, а в данных просто есть и \t и \n, но при использовании опции -w данные не грузятся

Ну так сразу все стало понятно
- и строка запуска
- и пример данных
- и текст ошибка

У вас ошибка в 17ой строке


Строка запуска
 bcp.exe" db1..tb1 in s:\TEST1\file1.dat -t__CDEL__  -t__LDEL__ -w -U sa -P pass2 -S serv1


Файл с данными прикреплен.

Ошибка:

Starting copy...
SQLState = 22005, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Invalid character value for cast specification

1 rows copied.


В итоге загружает в первой строке до первого \n

К сообщению приложен файл (file1.dat - 120bytes) cкачать
8 май 15, 15:17    [17618525]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavelot
В итоге загружает в первой строке до первого \n

Разумеется. В хелпе даже написано
-w
Performs the bulk copy operation using Unicode characters. This option does not prompt for each field; it uses nchar as the storage type, no prefixes, \t (tab character) as the field separator, and \n (newline character) as the row terminator.
8 май 15, 15:20    [17618553]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
stavelot
Member

Откуда:
Сообщений: 358
Glory
stavelot
В итоге загружает в первой строке до первого \n

Разумеется. В хелпе даже написано
-w
Performs the bulk copy operation using Unicode characters. This option does not prompt for each field; it uses nchar as the storage type, no prefixes, \t (tab character) as the field separator, and \n (newline character) as the row terminator.


Собственно, изночальный вопрос остался:

Как загрузить мультиязычный файл (c \t и \n в данных) в SQL Server с помощью bcp?
8 май 15, 15:45    [17618700]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
Balbidon
Member

Откуда: Donetsk->Emerald City
Сообщений: 358
Так как все-таки различаются \r\n в данных от \r\n-разделителей строк?
8 май 15, 23:48    [17620772]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
stavelot
Member

Откуда:
Сообщений: 358
Balbidon
Так как все-таки различаются \r\n в данных от \r\n-разделителей строк?


Конечно различаются, -t__CDEL__ -r__LDEL__

 bcp.exe db1..tb1 in s:\TEST1\file1.dat -t__CDEL__ -r__LDEL__ -w -U sa -P pass2 -S serv1
11 май 15, 11:53    [17625088]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка мультиязычного файла с помощью bcp.exe в NVARCHAR  [new]
Balbidon
Member

Откуда: Donetsk->Emerald City
Сообщений: 358
stavelot,

Похоже, проблема была с самим входным файлом, т.к. в нем не было разделителей строк. После их добавления все загрузилось с помощью следующей команды:

bcp tempdb.dbo.tb1 in C:\Temp\file1.dat -T -w -t__CDEL__ -r__LDEL__\n


На всякий случай исходный файл приложен сюда же.

К сообщению приложен файл (file1.zip - 257bytes) cкачать
12 май 15, 19:43    [17630721]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить