Краткая версия вопроса: Есть ли способ подсчета количества байтов, которое потребуется для хранения символов строки в столбце VARCHAR(n)
в базе данных Oracle?Байт-длина строки CLR
Более длинная версия: Следующий сценарий Oracle SQL завершится неудачно в третьем выражении. Он попытается вставить 10 символов в столбец VARCHAR(10)
; однако одним из этих символов является A с острым акцентом.
CREATE TABLE TESTTABLE (NAME VARCHAR(10) NULL);
INSERT INTO TESTTABLE (NAME) VALUES ('abcdefghij');
--1 rows inserted.
INSERT INTO TESTTABLE (NAME) VALUES ('ábcdefghij');
--ORA-12899: value too large for column "ACME"."TESTTABLE"."NAME" (actual: 11, maximum: 10)
Моя C# приложение хранит строки в базе данных Oracle, и я не могу просто изменить тип столбца NVARCHAR2(10)
, который будет работать. Ожидается, что приложение обрезает любую большую строку до предела в 10 символов, поэтому Oracle не будет жаловаться на ее длину. Но обрезка String.Length
- это очень наивная стратегия: она будет слепо оставить «ábcdefghij» неповрежденным со всеми его 10 символами CLR.
Как я могу определить, что «а» займет 2 байта в строке базы данных, поэтому я могу обрезать строку «ABCDEFGHI» перед выдачей INSERT
заявление?
EDIT: этот вопрос похож на Best way to shorten UTF8 string based on byte length
Это ответ, который лучше всего подходит для ситуации, потому что я могу сделать так много на стороне базы данных проблемы. Я ограничусь только заменой приложения C#. Спасибо всем! – Humberto