
# 处理字符串
处理SQL字符串数据类型（例如：varchar、text），有两种方式来声明宿主变量：
- 使用char\[\]（一个char字符串），该方式是C语言程序中处理字符数据最常见的方式。
  ```
  EXEC SQL BEGIN DECLARE SECTION;
      char str[50];
  EXEC SQL END DECLARE SECTION;
  ```
  注意字符串必须控制长度，如果上述示例的宿主变量用作存放查询结果且查询命令返回的字符串长度超过49字节，那么将会发生缓冲区溢出。
  
- 使用VARCHAR类型（ecpg提供的一种特殊类型）。在一个VARCHAR类型数组上的定义会被转变成一个struct类型。如下声明：
  ```
  VARCHAR var[180];
  ```
  会被转变成：
  ```
  struct varchar_var 
  { 
      int len; 
      char arr[180]; 
  } var;
  ```
  为了在VARCHAR宿主变量中存储字符串，该变量必须声明为包含以零字节（'\\0'）作为终止符的字符串。字段arr存放以零字节为终止符的字符串，字段len存放存储在arr中的字符串的长度，计算长度时不包括终止符。当宿主变量被用于一个查询的输入时，如果strlen(arr)和len结果不同，将使用较短的那一个。
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  - VARCHAR可以写为大写或小写形式，但是不能大小写混合。
  
  - char和VARCHAR类型宿主变量也可以保存其他SQL类型的值，它们将被存储为字符串形式。
    
 
