Символы Юникода в операторе «LABEL ON» - AS400 / DB2 - PullRequest
0 голосов
/ 14 октября 2019

Я хотел бы поместить символ Unicode в оператор "LABEL ON" в AS400. Это дает мне следующую ошибку:

[Error Code: -104, SQL State: 42601] [SQL0104] Token UX'0171' was not valid. Valid tokens: <CHARSTRING>. Cause . . . . . : A syntax error was detected at token UX'0171'. Token UX'0171' is not a valid token. A partial list of valid tokens is <CHARSTRING>. This list assumes that the statement is correct up to the token. The error may be earlier in the statement, but the syntax of the statement appears to be valid up to this point. Recovery . . . : Do one or more of the following and try the request again: -- Verify the SQL statement in the area of the token UX'0171'. Correct the statement. The error could be a missing comma or quotation mark, it could be a misspelled word, or it could be related to the order of clauses. -- If the error token is <END-OF-STATEMENT>, correct the SQL statement because it does not end with a valid clause.

Утверждение:

LABEL ON COLUMN TABLENAME.COLUMNNAME IS 'ű';

"ű" - венгерская двойная острая букваЮникод это U + 0171. Он также выдает ошибку на другой двойной острой букве "ő" (U + 0151). Он не выдает ошибку на менее специальных символах, таких как одиночные острые буквы (áéíóúöü).

Страница IBM в операторе "LABEL ON" не имеет специфики для кодов символов, она только упоминает длину метки.

Я попытался вставить текст с этим символом в произвольный текстовый столбец в базе данных, и у него не было проблем с вставкой (хотя он отображался, но теперь это не проблема).

Я такжегде-то читал, что у AS400 много имен, что затрудняет поиск ответов.

Есть ли способ, позволяющий вводить такие специальные символы Юникода внутри оператора "LABEL ON" в AS400?

1 Ответ

0 голосов
/ 14 октября 2019

Синтаксис LABEL ON для меток столбцов: LABEL ON Selected syntax tree

Согласно документации строковой константы SQL (найдено здесь ):

Константы символьных строк могут содержать смешанные данные. Если CCSID задания поддерживает смешанные данные, константа символьной строки классифицируется как смешанные данные, если она включает подстроку DBCS. Во всех других случаях константа символьной строки классифицируется как данные SBCS.

CCSID, назначенный этой константе, является CCSID текста оператора SQL, содержащего константу, если только оператор SQL не закодирован в Unicode или иностранномсхема кодирования (например, ASCII). В этом случае текст оператора SQL преобразуется из Unicode или внешней схемы кодирования в CCSID по умолчанию текущего сервера. CCSID, назначенный для константы, будет CCSID по умолчанию для текущего сервера 1.

Таким образом, строковые константы будут обрабатываться как строки DBCS или SBCS в зависимости от CCSID по умолчанию вашего сервера (не обязательно 37). Вы не можете вставить Unicode в метку. Если символ, который вы хотите использовать, находится в вашем CCSID по умолчанию, то вы можете добавить его в виде шестнадцатеричного значения, если его нет на клавиатуре. В противном случае вам не повезло. Вставка данных в базу данных - это отдельная история.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...