tru*_*ker 8 firebird character-encoding
SQL select命令
SELECT a.RDB$CHARACTER_SET_NAME FROM RDB$DATABASE a
Run Code Online (Sandbox Code Playgroud)
返回NULL.在创建新数据库时未指定任何字符集时使用了什么字符集?各种版本的Firebird(1.0,2.0,2.5.1等)之间有区别吗?
Mar*_*eel 15
在创建期间未指定字符集时,数据库的缺省字符集是字符集NONE,请参见"Interbase 6.0数据定义指南"的第47页(可在firebird网站的文档部分中找到).这是Firebird之前的方式(可能是自Interbase创建以来),并且仍然适用于现有版本.但是,在Firebird 2.5下创建没有默认字符集的数据库时,则RDB$CHARACTER_SET_NAME会有值NONE.我不确定在早期版本中这是否有所不同,我的猜测仍然是它NONE用作默认值,即使它报告NULL.
如果您想确定,只需创建一个带有CHAR或VARCHAR没有字符集规范的列的基本表,然后使用以下查询来确定默认值:
SELECT a.RDB$FIELD_NAME, a.RDB$RELATION_NAME,
b.RDB$CHARACTER_SET_ID, c.RDB$CHARACTER_SET_NAME
FROM RDB$RELATION_FIELDS a
INNER JOIN RDB$FIELDS b
ON b.RDB$FIELD_NAME = a.RDB$FIELD_SOURCE
INNER JOIN RDB$CHARACTER_SETS c
ON c.RDB$CHARACTER_SET_ID = b.RDB$CHARACTER_SET_ID
WHERE RDB$RELATION_NAME = 'TABLE_NAME'
Run Code Online (Sandbox Code Playgroud)
您可以使用它来查找任何((VAR)CHAR)字段BTW 的字符集.
字符集NONE意味着没有字符集假设,因此您可以将数据存储在任何字符集中.但是,您无法将其存储或与具有显式字符集的列进行比较(除了可能的字符集OCTETS,不确定).
如果您使用,NONE则需要确保在连接到数据库时始终使用相同的连接字符集,或者如果使用字符集NONE作为连接字符集,则应用程序,驱动程序,访问组件或编程语言始终使用相同的编码,否则你会得到音译问题(字符编码问题).
使用NONE作为连接字符集有其他问题.例如,列的数据将始终按原样发送,并按接收方式存储,除非在列的字符集中不允许字节组合.基本上它意味着数据库必须在创建它的同一语言环境中使用.
一般来说,最好明确一下默认字符集,除非你知道自己在做什么.
| 归档时间: |
|
| 查看次数: |
10332 次 |
| 最近记录: |