Страница 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
А кто что скажет про это??? пробовал но что то не работает, или я не умею его готовить??
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
А кто что скажет про это??? пробовал но что то не работает, или я не умею его готовить??
Это опять же на будущее. Справку подготовили, а функционал нет.
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
Clarion Data Type Matching for SQL Servers - Соответствие типов Clarion типам SQL серверов
Добавлено: 30 Ноябрь 2023, 16:31
kreator
Ну вот для примера -
Два поля типа 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, мы с ней работаем. Вот так на стороне сервера:
Вот так у нас в словаре:
Всё работает. Но поля явно не Юникод. Описание на стороне сервера:
К сожалению плотно с MS SQL не работаю.