Oracle
 sql >> база данни >  >> RDS >> Oracle

Истинската дължина на низ, както се вижда от Oracle

Можете, както показаха други, да конвертирате низа на Java в масив от байтове, като използвате набора от символи на базата данни на Oracle и след това да получите дължината в байтове от това. Това обаче зависи от това да знаете какъв е наборът от знаци на вашата база данни - различните бази данни ще имат различни набори от знаци, което ще доведе до различни дължини на байтове за един и същ низ в различни набори от знаци.

Ако приемем, че вашата база данни използва набор от знаци с променлива ширина като UTF-8 (NLS_CHARACTERSET на AL32UTF8), можете също да декларирате колони в Oracle въз основа на дължината на знака, а не на дължината на байта. Това може да опрости вашия код, тъй като можете просто да проверите дължината на знака на вашия низ. Той също така опростява комуникацията за потребителите. По принцип е трудно за потребителите да разберат защо едно поле понякога може да съхранява 5 знака, докато друг път отхвърля низ от 2 знака в зависимост от знаците, които са част от низа (1 знак в набора от символи UTF-8 може да изисква до 3 байта на съхранение).

По подразбиране, когато декларирате колона

CREATE TABLE foo (
  col_name VARCHAR2(5)
);

което казва на Oracle да разреши до 5 байта данни. Ако обаче искате да разрешите 5 знака данни, независимо от броя на байтовете, можете да използвате семантика за дължина на знака

CREATE TABLE foo (
  col_name VARCHAR2(5 CHAR)
);

Ако приемем, че искате да направите това за всичките си таблици, докато изпълнявате своя DDL, можете също да зададете nls_length_semantics на ниво сесия, преди да стартирате вашия DDL

ALTER SESSION SET nls_length_semantics = CHAR;

CREATE TABLE foo (
  col_name VARCHAR2(5)
);

създава таблица с колона, която позволява до 5 знака данни.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да променя съществуващо ограничение за проверка?

  2. Има ли алтернатива на пакета utl_http за http заявка, използваща Oracle pl sql?

  3. Oracle:Как мога да посоча символни литерали в реализации на TO_DATE?

  4. Как да преобразувам поредица от знаци във формат за дата, който да се съхранява в базата данни?

  5. Как да реализираме многоизмерни последователности