返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

企业管理器执行SQL查询表中BLOB列值中文
乱码
问题现象
使用企业管理器执行SQL 查询,查询表中BLOB 列字段值,列值中文乱码。
查询步骤如下:
步骤1
创建测试表;
CREATE TABLE test(a INT,b BLOB);
步骤2
insert into test values (1,’asdasda’),(2,’是吗’), 3,('as是吗');
步骤3
使用企业管理器查询;
SELECT a,b FROM test;
解决方法
可以通过以下设置解决:
步骤1
点击菜单栏“窗口”-->“首选项”页面中的选择“使用自定义字符集”。
步骤2
自定义字符集选择“UTF-8”编码,点击应用。
步骤3
再次查询既可显示中文。
在查询窗口中自定义结果集字符集进行设置。

取值:支持的字符集
默认值:安装指定
说明:操作系统字符集。
修改方式:
可使用set 语句修改值也可在配置文件中修改值。
适用于session、
global
范围均可。

使用参数段向例程传递一个特定值作为输入。无论何处,只要您在语法图中看到
对 argument 的引用,就请使用本段。
语法
参数

元素
描述
限制
语法
parameter
由您指定它的
值的参数
必须和 CREATE FUNCTION 或
CREATE PROCEDURE 语句声明的名
称相匹配
标识符
singleton
_select
返回单值的内
嵌查询
必须返回一个与 parameter 兼容
的数据类型和长度的值
SELECT
语句
用法

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1587
CREATE PROCEDURE 或 CREATE FUNCTION 语句可以为 UDR 定义一个参
数列表。如果参数列表非空,则调用 UDR 时必须输入参量。参量是一个特定的
值,它的数据类型兼容相应的 UDR 参数。
当执行一个 UDR 时,可以任选下面两种方法之一输入参量:

和参数名一起(以 parameter name = expression) 的形式)输入,即使参
量和参数的顺序不同

按照位置输入,不加 parameter 名称,每个 expression 的顺序和参量对
应的参数相同。(这有时称为 ordinal 格式。)
在例程的一次单个调用中不能混合使用这两种方法来指定参量。例如:如果为一
个参量指定了一个参数名,那么必须对所有参量都使用参数名。
在以下示例中,用户定义的过程要求三个字符参量 t 、d 和 n,两个语句都是有
效的:
EXECUTE PROCEDURE add_col (t ='customer', d ='integer', n ='newint');
EXECUTE PROCEDURE add_col ('customer','newint','integer') ;
比较参量和参数列表
当用 CREATE PROCEDURE 或 CREATE FUNCTION 创建或注册一个 UDR
时,用 UDR 要求的参数名和数据类型声明一个参数列表。(对于用 C 或
Java™ 语言编写的外部例程,参数名是可选的。)有关声明参数的详细信息,请
参阅例程参数列表。
如果不同的例程具有相同的标识符但是声明的参数个数不同,用户定义的例程可
以是过载的。有关重载的更多信息,请参阅 例程重载以及例程签名。
如果试图以超出 UDR 要求的参量来执行 UDR ,就会接收到一条错误消息。
如果已少于 UDR 要求的参量来调用 UDR,那么就可以将省略的参量说成缺少。
数据库服务器将缺少的参量初始化为它们相应的缺省值。这个初始化过程发生在
UDR 主体中第一条可执行语句之前。
如果缺少的参量没有缺省值。则 GBase 8s 发出错误。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1588
已命名的参数不能用于调用在它们的例程特征符中重载数据类型的 UDR。只有例
程的特征符具有不同数量的参数时,命名的参数用于解析非唯一的例程名称才是
有效的:
func( x::integer, y ); -- VALID if only these 2 routines
func( x::integer, y, z ); -- 具有相同的 'func' 标识

func( x::integer, y ); -- NOT VALID if both routines have
func( x::float, y) ; -- 相同的标识和两个参数
对于顺序和命名的参数,如果两个或更多的 UDR 特征符具有多个数目的缺省
值,则会执行参数最少的例程:
func( x, y default 1 )
func( x, y default 1, z default 2 )
如果两个同时称作 func 的已注册的 UDR 具有以上所示的特征符,那么语句
EXECUTE func(100) 调用 func(100,1)。
不能使用命名的参数提供缺省值的子集,除非这些参数遵循例程特征符的位置顺
序。即,不能跳过一些参量而依赖于数据库服务器提供它们的缺省值。
例如,给定以下特征符:
func( x, y default 1, z default 2 )
可执行:
func( x=1, y=3 )
但不能执行:
func( x=1, z=3 )
表达式的子集作为参量有效
参数的语法图涉及这一节的内容。
除了聚集函数以外,可以使用任何表达式作为参量。如果使用子查询或函数调用
作为参量,那么子查询或函数必须返回适当数据类型和大小的单个值。有关 SQL
表达式的用途和语法,请参阅表达式。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1589
远程数据库中的 UDR 参量
远程数据库中的 UDR 参数在大多数上下文中,UDR 在跨数据库和跨服务器分布
式操作中有效,但每个参与的数据库必须具有相同的日志记录模式。
除了 BIGSERIAL 、BYTE 、SERIAL 、SERIAL8 和 TEXT,可作为跨服务器的 UDR
的参数的有效的数据类型 包括分布式查询中的数据类型中列出的不透明的内置
SQL 数据类型和这些附加内置透明和 DISTINCT 数据类型:

BOOLEAN

LVARCHAR

不透明的内置类型的 DISTINCT

BOOLEAN DISTINCT

LVARCHAR DISTINCT

以上列出的 DISTINCT 类型的 DISTINCT
如果 UDR 是在所有参与的数据库中定义 ,则这些数据类型可以是 SPL 、C 或
Java™ 语言的 UDR 的参数。在这些数据类型上定义的任何隐式或显式转换必须
在所有参与的 GBase 8s 实例之间复制。DISTINCT 数据类型必须在参与分布式
查询的所有数据库中定义完全相同的数据类型层次结构。
相同的数据类型在调用相同的 GBase 8s 实例的其它数据库中的 UDR 时也作为参
数有效,以及以下其它类型的参数:

BLOB

CLOB

您显式转换为内置类型的 UDT
所有的 UDR 、UDT 、DISTINCT 数据类型 、DISTINCT 类型层次结构、转型
和转型函数必须在所有参与的数据库中注册。有关分布式操作中的 DISTINCT 类
型的更多信息,请参阅 分布式操作中的 DISTINCT 类型。