Страница 2 из 2

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Добавлено: 28 Ноябрь 2023, 13:35
Игорь Столяров
Табличка показывает расчёт длины L для STRING(L) от значения N для NVARCHAR(N).
Разве длина STRING в Clarion чем-то отличается от длины STRING в SQL ? ;)

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Добавлено: 28 Ноябрь 2023, 16:00
kreator
ingasoftplus писал(а): 28 Ноябрь 2023, 12:58 для NVARCHAR такое не проходит
Почему не проходит? Ошибку какую-то выдаёт?
NCHAR
Представляет собой символьный тип данных фиксированной длины с предопределённым
набором символов ISO8859_1.
Синтаксис:

NCHAR [(length)]

Синонимом является написание NATIONAL CHAR.
Аналогичный тип данных доступен для строкового типа переменной длины: NATIONAL
CHARACTER VARYING
ISO8859_1 - это обычная (почти) западноевропейская кодировка. Судя по Википедии - один байт на символ.

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Добавлено: 28 Ноябрь 2023, 17:35
RaFaeL
Игорь Столяров писал(а): 28 Ноябрь 2023, 13:35 Табличка показывает расчёт длины L для STRING(L) от значения N для NVARCHAR(N).
Это неправильный расчет!
В UTF-8 символ занимает от 1 до 6 байтов!
Помните в xlsx не выгружался символ "№"? А это именно потому, что там расчет был по этой табличке и последний байт обрезался, так как "№" занимает 3 байта
Так что чтоб гарантированно влезло нужно L*6+1 (в реальной жизни хватит 4х символов, 6 вряд ли встретится)

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Добавлено: 28 Ноябрь 2023, 18:58
kreator
Строго говоря, Юникод не причём. Если в SQL задать столбец вот так - varchar(100), то длина в байтах будет зависеть от параметра "Character Set". В кодировке Win1252 это будет 100 байтов, а в кодировке, допустим, UTF8 вообще непонятно сколько, в зависимости от символов. Я к тому, что сама по себе задача нетривиальная перевести SQL-строку в Юникоде в банальную строку в Кларионе. Правильный путь - иметь тип данных такой же как и в SQL (с кодировкой Юникод). Т.е. если у меня в SQL varchar(100) в Юникоде, то в Кларионе должен быть USTRING(100). Независимо от того сколько это байт. Либо какая-то другая внутренняя реализация в Кларионе, допустим тупо держать четыре байта на символ. Про 6 байтов - не знаю откуда это.

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Добавлено: 29 Ноябрь 2023, 7:43
PavelNK
RaFaeL писал(а): 28 Ноябрь 2023, 17:35
Игорь Столяров писал(а): 28 Ноябрь 2023, 13:35 Табличка показывает расчёт длины L для STRING(L) от значения N для NVARCHAR(N).
Это неправильный расчет!
В UTF-8 символ занимает от 1 до 6 байтов!
Помните в xlsx не выгружался символ "№"? А это именно потому, что там расчет был по этой табличке и последний байт обрезался, так как "№" занимает 3 байта
Так что чтоб гарантированно влезло нужно L*6+1 (в реальной жизни хватит 4х символов, 6 вряд ли встретится)
Расчет правильный, nvarchar - это UniCode, а не UTF-8

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Добавлено: 29 Ноябрь 2023, 11:44
ingasoftplus
А кто что скажет про это??? пробовал но что то не работает, или я не умею его готовить??
image.png

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Добавлено: 29 Ноябрь 2023, 12:08
Игорь Столяров
Как я понимаю: создание БД в UTF-16 (как на картинке) и тип данных NVARCHAR (который хранит данные в UNICODE) - это иное.

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Добавлено: 30 Ноябрь 2023, 14:02
kreator
ingasoftplus писал(а): 29 Ноябрь 2023, 11:44 А кто что скажет про это??? пробовал но что то не работает, или я не умею его готовить??
Это опять же на будущее. Справку подготовили, а функционал нет. :D
ingasoftplus писал(а): 29 Ноябрь 2023, 11:44 Расчет правильный, nvarchar - это UniCode, а не UTF-8
А в чём разница? Посмотрите мой пост выше. Тип строкового поля никак не связан с Юникодом. Юникод это или не Юникод зависит от параметра "Character Set".
ingasoftplus, я так понимаю это сторонняя база. Что показывает Studio? Что там в этом поле записано?

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Добавлено: 30 Ноябрь 2023, 14:11
ingasoftplus
kreator писал(а): 30 Ноябрь 2023, 14:02 Юникод это или не Юникод зависит от параметра "Character Set".
поясните плиз? где?
kreator писал(а): 30 Ноябрь 2023, 14:02 я так понимаю это сторонняя база. Что показывает Studio? Что там в этом поле записано?
ну что значит - сторонняя?? своя mssql база. Студио показывает все правильно - все символы записаны верно
kreator писал(а): 30 Ноябрь 2023, 14:02 Тип строкового поля никак не связан с Юникодом.
ну как же не связан? nvarchar уже и говорит - что в поле unicode

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Добавлено: 30 Ноябрь 2023, 16:23
kreator
Вот мой пост - https://forum.clarionlife.net/viewtopic ... 146#p52146. В MS SQL другая реализация?

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Добавлено: 30 Ноябрь 2023, 16:31
kreator
Ну вот для примера -
columns.png
Два поля типа varchar, но с разными кодировкой и сортировкой (Коллате :) ).

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Добавлено: 30 Ноябрь 2023, 17:08
ingasoftplus
kreator писал(а): 30 Ноябрь 2023, 16:31 Ну вот для примера
а что за программу вы используете (на вашей картинке)???

Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов

Добавлено: 01 Декабрь 2023, 19:20
kreator
Это IBExpert для FireBird. Может у мелкомягких другие фантазии. Есть у нас сторонняя БД на MS SQL, мы с ней работаем. Вот так на стороне сервера:
image003.jpg
Вот так у нас в словаре:
image005.jpg
Всё работает. Но поля явно не Юникод. Описание на стороне сервера:
image008.jpg
К сожалению плотно с MS SQL не работаю.