powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Bulk Insert и UTF-8
10 сообщений из 10, страница 1 из 1
Bulk Insert и UTF-8
    #39723919
Dm13_13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! есть csv файл, генерируемый Crystal Report, который должен втавляться в sql базу c помощью bulk insert. Проблема в том, что csv файл в UTF-8, который, как я понимаю, распознается только SQL Server 2014SP и выше, а у нас 2012 SP4, поэтому вместо русских символов получается каша.

Есть ли способ обойти это с помощью SQL или надо копать в сторону смены кодировки файла, формируемого Crystal Report?

Спасибо
...
Рейтинг: 0 / 0
Bulk Insert и UTF-8
    #39723983
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dm13_13,
Без проблем UTF-8 загоняется в любой SQL.
...
Рейтинг: 0 / 0
Bulk Insert и UTF-8
    #39723999
Dm13_13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Massa52,

при выполнении

Код: sql
1.
2.
3.
4.
5.
6.
SELECT @sql =
'BULK INSERT tbl_test FROM ''c:\tmp\msg.csv''
WITH (FIRSTROW = 1, FIELDTERMINATOR = '';'',
CODEPAGE=''ACP'',
ROWTERMINATOR = ''' + nchar(10) + ''')'
EXEC(@sql)



вместо русских символов вставляются кракозямбы
...
Рейтинг: 0 / 0
Bulk Insert и UTF-8
    #39724002
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Massa52Dm13_13,
Без проблем UTF-8 загоняется в любой SQL.
С этого места поподробнее!
Я записываю!!!
...
Рейтинг: 0 / 0
Bulk Insert и UTF-8
    #39724007
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dm13_13,
http://www.sql.ru/forum/1022040/bulk-insert-ne-ponimaet-utf-8
Может bcp вас устроит?
...
Рейтинг: 0 / 0
Bulk Insert и UTF-8
    #39724017
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222,
Облом однако. Я вроде загонял кажись с помощью bcp - я уже и в этом сомневаюсь.
Тут нашел советы как с помощью форматного файла загнать можно - но повторить не получилось.
https://blogs.technet.microsoft.com/isv_team/2011/08/20/bulk-insert/
...
Рейтинг: 0 / 0
Bulk Insert и UTF-8
    #39724024
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что интересно - при сохранении текстового файла в OEM 866 кодовой страницы
кирилица нормально проходит.

col1 col2 col3
ЄхёЄ1 ЄхёЄ2 ЄхёЄ3 windows-1251
тест1 тест2 тест3 oem-866
...
Рейтинг: 0 / 0
Bulk Insert и UTF-8
    #39724025
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dm13_13Проблема в том, что csv файл в UTF-8, который, как я понимаю, распознается только SQL Server 2014SP и вышеНачиная с 2016, если быть точным .

В вашем случае я бы попробовал SSIS, у него с этим проблем нет. Можно, конечно, написать и самодельный конвертер - десяток строк на C#, вряд ли больше. Ну или CLR на нем же.
...
Рейтинг: 0 / 0
Bulk Insert и UTF-8
    #39724042
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor TiegaelМожно, конечно, написать и самодельный конвертер - десяток строк на C#, вряд ли больше. Ну или CLR на нем же.

2 (две) строки на PowerShell.
...
Рейтинг: 0 / 0
Bulk Insert и UTF-8
    #39724047
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, если не слишком много - MS SQL сам могет

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	Преобразование utf8 в utf16 (nchar)
-- =============================================
/* 
declare @b as varbinary(max) = 0xD09CD0BED180D0B520D0A2D180D18DD0B2D0B5D0BB2E20D094D09ED09AD0A3D09CD095D09DD0A2D0AB20D094D09BD0AF20D09AD09BD098D095D09DD0A2D09020D0BFD0BE20D182D183D180D1832054523830393230303034;
select * from dbo.[utf8-to-utf16](@b)
*/
ALTER FUNCTION [dbo].[utf8-to-utf16]( @utf8 varbinary(max) )
RETURNS TABLE 
AS
RETURN 
(
with b as ( select b = substring(@utf8, n, 1), n from dbo.N where n between 1 and len(@utf8) )
   , bn as ( select b, n from b where b&128 = 0 or b&224 = 192 or b&240 = 224 or b&248 = 240 )
   , chs as ( select b = case  
                            when b&128 = 0   then      b 
                            when b&224 = 192 then     (b&31) * 64 | ( substring(@utf8, n+1, 1) & 63 ) 
                            when b&240 = 224 then   ( (b&15) * 64 | ( substring(@utf8, n+1, 1) & 63 ) ) * 64 | ( substring(@utf8, n+2, 1) & 63 ) 
                            else                  ( ( (b&07) * 64 | ( substring(@utf8, n+1, 1) & 63 ) ) * 64 | ( substring(@utf8, n+2, 1) & 63 ) ) * 64 | ( substring(@utf8, n+3, 1) & 63 ) 
                         end
                   , n
               from bn
           )
    select utf16 = ( select nchar(b) from chs order by n asc for xml path(''), type ).value('.', 'nvarchar(max)')
)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Bulk Insert и UTF-8
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]