我有一张桌子:
CREATE TABLE test_val (
name VARCHAR2(10 CHAR) NOT NULL
);
假设我插入以下内容:
INSERT INTO TEST_VAL (name) VALUES('££££££££££'); --data here may be variable characters string so size may vary from 10 to 40 bytes
现在表中的值是10个字符,但是20个字节。
并说我想将列的大小减小到10个字节,我不关心数据丢失。 我做了以下事情:
UPDATE test_val SET name = substr(name,1,10) WHERE lengthb(name)>10;
ALTER TABLE test_val
MODIFY name varchar2(10);
我收到错误,列中的值太大,因为substr(name,1,10)会留下10个符号。
所以我的问题是:是否有一个 substr 替代方法,可以将值子串到字节数,如果没有,是否有另一种方法来减少列值,以便我可以运行alter table?
由于
答案 0 :(得分:1)
有substrb
function以字节为单位计算(以及substrc
,substr2
和substr4
以获取多个Unicode字符,UCS2和UCS4代码点)。如果你的数据库字符集是AL32UTF8
,请记住字符可能需要1到4个字节的存储空间 - 我不知道如果你试图从一个字节获取10个字节的数据会发生什么字符串,当它会切断中间的一个字符。
答案 1 :(得分:0)
您可以尝试使用substrb
-
UPDATE test_val SET name = substrb(name,1,10) WHERE lengthb(name)>10;