sql - SQL Developer 用空格填充 char 中的剩余空间
问题描述
我有一个数据类型为 char(256) 的属性。我通过 SQL Developer 从 csv 文件导入值 当属性获得一个包含 10 个字符的值时,剩余空间将被空格填充。
我知道 char 静态分配空间,但这是否也意味着我得到一个格式为 "abc" 的字符串?
由于这使得具有相等运算符的 sql 语句变得困难。
解决方案
您是在误解下经营的;它与 SQL Developer 无关。
CHAR
数据类型是固定长度的字符串;如果您没有提供完整长度的字符串,那么 Oracle 将用空格 (ASCII 32) 字符对字符串进行右填充,直到它具有正确的长度。
从文档中:
CHAR
数据类型数据类型存储固定长度的
CHAR
字符串。创建包含CHAR
列的表时,必须为CHAR
列宽指定 1 到 2000 个字节之间的字符串长度(以字节或字符为单位)。默认值为 1 个字节。然后,Oracle 保证:
- 当您在表中插入或更新一行时,该
CHAR
列的值具有固定长度。- 如果您给出一个较短的值,那么该值将被空白填充到固定长度。
- 如果值太大,Oracle 数据库会返回错误。
Oracle 数据库
CHAR
使用空白填充的比较语义来比较值。
为了解决这个问题,不要使用CHAR
可变长度字符串,VARCHAR2
而是使用。
VARCHAR2
和VARCHAR
数据类型数据类型存储可变长度的
VARCHAR2
字符串。创建包含VARCHAR2
列的表时,请为列指定 1 到 4000 个字节之间的最大字符串长度(以字节或字符为单位)VARCHAR2
。对于每一行,Oracle 数据库将列中的每个值存储为可变长度字段,除非某个值超过列的最大长度,在这种情况下,Oracle 数据库会返回错误。使用VARCHAR2
并VARCHAR
节省表使用的空间。
推荐阅读
- c# - 按最大计算值排序列表c#
- ibm-cloud - IBM Cloud Object Storage:使用 CLI 获取存储桶大小
- wordpress - 在产品属性之间添加“x”,而不是在最后一个属性之后添加“x”
- java - 如何用“@”符号分隔 2 个单词?
- javascript - Uncaught SyntaxError: Unexpected token < in JSON at position 0 with TinyMCE Editor Image Upload
- javascript - 通过滚动另一个和周围的方式滚动 DIV
- flutter - 未找到模块“firebase_admob”
- javascript - Fetch API PUT 方法不更新数据库
- mongoose - 猫鼬填充文档
- python - Selenium 找不到 css 类