SQL错误:ORA-12899:值对于列来说太大

Dav*_*vid 6 sql oracle ora-12899

我创建了下表

CREATE TABLE Customers(
  CustomerID varchar2(9) PRIMARY KEY, 
  Customer_Contact varchar2(40) NOT NULL, 
  Address varchar2(20) NOT NULL,
  Post_Code varchar2(7) NOT NULL, 
  Telephone_Number varchar2(11) NOT NULL)
Run Code Online (Sandbox Code Playgroud)

我目前正在尝试使用INSERT VALUES语句.我写了以下声明

INSERT INTO Customers VALUES(
  501623129, 
  'John Petterson', 
  '-- Singleton Close London', 
  '--- ---', 02082860222)
Run Code Online (Sandbox Code Playgroud)

当我尝试运行该语句时,它给出了以下错误消息.

在命令的第4行开始出错:INSERT INTO Customers VALUES(501623129,'David Patterson','30 Singleton Close London','SW17 9JY',02082860642)错误报告:SQL错误:ORA-12899:值太大而不适合列" DJ"."CUSTOMERS"."ADDRESS"(实际:25,最大值:20)12899.00000 - "列%s的值太大(实际:%s,最大值:%s)"

Sat*_*hat 19

ORA-12899: value too large for column "DJ"."CUSTOMERS"."ADDRESS" (actual: 25, maximum: 2
Run Code Online (Sandbox Code Playgroud)

告诉你错误是什么.地址最多可以包含20个字符,您传递的是25个字符.


wwe*_*ker 9

如上所述,错误消息显示确切的问题:您将25个字符传递到设置为20的字段中.您可能还需要考虑更精确地定义列.您可以定义VARCHAR2列是否存储一定数量的字节或字符.在将来尝试在字段中插入多字节字符时可能会遇到问题,例如,这个字符长度为5个字符,但不适合5个字节:'ÀÈÌÕÛ'

这是一个例子:

CREATE TABLE Customers(CustomerID  VARCHAR2(9 BYTE), ...
Run Code Online (Sandbox Code Playgroud)

要么

CREATE TABLE Customers(CustomerID  VARCHAR2(9 CHAR), ...
Run Code Online (Sandbox Code Playgroud)